SQL 执行计划管理(SPM)

一、SPM 需求背景

任何数据库应用程序的性能在很大程度上都依赖于查询执行,尽管优化器无需用户干预就可以评估最佳计划,但是 SQL 语句的执行计划仍可能由于以下多种原因发生意外更改:版本升级、重新收集优化器统计信息、改变优化器参数或模式/元数据定义。由于无法保证计划始终向更好的情况改变,如果在环境变化时能够维持当前执行计划不变,或者只向更好的情况改变,将是最理想的解决方案。

二、SPM 重要构成

SQL 计划管理 (SPM) 确保运行时性能永远不会因为执行计划的更改而降低。因此,SQL 语句执行时只使用已接受(受信任)的执行计划;跟踪任何计划发展并随后对其进行评估,如果新计划未造成运行时性能改变或运行时性能提高,则接受新计划为经验证的计划。

SQL 计划管理由三部分组成:SQL 计划基准捕获、SQL计划基准选择、SQL 计划基准发展。

1. SQL 计划基准捕获

创建 SQL 计划基准,包含所有 SQL 语句的受信任的执行计划(ACCEPTED = YES)

(1)如何创建 SQL 计划基准

包含两种方式:

  • 自动捕获执行计划

  • 批量加载执行计划,包含四种技术

    i 针对给定的 SQL 调优集(STS)加载执行计划
    ii 从存储大纲加载执行计划
    iii 使用游标缓存中目前的执行计划
    iv 从临时表解压缩现有的 SQL 计划基准

(2)如何查看 SQL 计划基准

SQL > select plan_name, sql_handle, enabled, accepted, fixed, module, sql_text from dba_sql_plan_baselines;

PLAN_NAME                          SQL_HANDLE                        ENA ACC FIX
----------------------------------- -------------------------------- --- --- ---
MODULE
-----------------------------------------------------
SQL_TEXT
------------------------------------------------------------------------------------
SQL_PLAN_191pkfncj4zuddbd90e8e SYS_SQL_1486b27519127f4d              YES YES NO
sqlplus@e2c90ae100ab(TNS V1-V3)
select * from t1 where idcard > 500
 
 SQL_PLAN_d9zsu6rdznqvgdbd90e80 SYS_SQL_d4ff1a35dbfa5bdfa5b6f        YES YES NO
 sqlplus2e2c90ae100ab(TNS V1-V3)
 select * from t1 where user_id > 100

2. SQL 计划基准选择

(1)执行计划的三个属性

  • ENABLED - 表示计划已启用,可供优化器使用,若计划未设置未 ENABLED,则优化器不考虑此计划。
  • ACCEPTED - 表示该计划已被验证为有效计划,若计划未验证为 ACCEPTED,则优化器不考虑此计划。
  • FIXED - 固定计划,表示优化器只会考虑标记为 FIXED 的执行计划,且从中选择 cost 最低的固定计划。

(2)如何选择 SQL 计划
在这里插入图片描述** 注意这里每次重新计算 cost 的代价不大,因为执行计划是已知的,优化器不必遍历所有的可能,只需根据算法计算出已知计划的 cost 便可。

3. SQL计划基准发展

(1)SQL 计划基准发展的三种选择

  • 仅当其性能比现有 SQL 计划基准更准更佳时才接收新计划,逻辑如下图
  • 不进行性能检验就接收新计划
  • 运行性能比较并生成报告,但不发展新计划

(2)如何发展 SQL 计划基准
在这里插入图片描述

三、使用和管理 SQL 管理库

1. 初始化参数

optimizer_capture_sql_plan_baselines - 控制可重复 SQL 语句的新 SQL 计划基准的自动捕获,默认设置为 FALSE

optimizer_use_sql_plan_baselines - 控制 SQL 计划基准的使用,启用后,优化器在 SQL 计划基准中寻找正在编译的 SQL 语句的计划,如果找到,优化器会计算各个计划的性能开销,然后选择开销最低的计划。默认设置为 TRUE

2. 管理 SQL 管理库的空间使用

管理库包括语句日志、计划历史记录和 SQL 计划基准。

  • 存储:SQL 管理库是数据库字典的组成部分,存储在 SYSAUX 表空间中。SQL 管理库默认占用不超过 SYSAUX 表空间的10%,可设置为 1%-50%。每周检测,若超过该限制,则会告警。
  • 清理:每周定期清理执行计划,默认超过 53 周未使用的计划都会被清理,可设置为 5-523 周。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/53245.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IT技术面试中常见的问题及解答技巧

在IT技术面试中,面试官常常会问到一些常见的问题,针对这些问题,我们可以充分准备和提前准备一些解答技巧。下面我将分享一些我个人的经验和观察,希望对大家有所帮助。 请介绍一下你的项目经验。 在回答这个问题时,我们…

Linux命令大全

目录 第一章、系统命令1.1)系统命令1.2)目录结构1.3)编辑命令vi/vim 第二章、文件操作命令(区分大小写)2.1)查看查找文件和文件信息,切换目录2.2)新建/删除/复制/移动修改文件和文件…

go 如何知道一个对象是分配在栈上还是堆上?

如何判断变量是分配在栈(stack)上还是堆(heap)上? Go和C不同,Go局部变量会进行逃逸分析。如果变量离开作用域后没有被引用,则优先分配到栈上,否则分配到堆上。判断语句:…

苍穹外卖day10——订单状态定时处理(Spring Task)、来单提醒和客户催单(WebSocket)

预期效果 对于超时没处理的需要定时程序处理。基于SpringTask实现。 来单提醒和客户催单。基于WebSocket实现。 Spring Task 介绍 Cron表达式 周几通常不能和日一起指定。 cron表达式在线生成器 在线Cron表达式生成器 入门案例 创建定时任务类 /*** 定义定时任务类*/ Slf4j…

HCIA实验四

一.实验要求: 1、R4为ISP,其上只能配置IP地址;R4与其他所有直连设备间均使用共有IP; 2、R3 - R5/6/7为MGRE环境,R3为中心站点; 3、整个网络配置OSPF环境,IP基于172.16.0.0/16网段划分&#x…

Hexo+GithubPages免费搭建个人博客网站

HexoGithubPages免费搭建个人博客网站 目录 一、前言二、Github配置 新建同名仓库配置Pages 三、安装Hexo四、配置hexo-deployer-git五、访问六、发布文章七、安装主题 一、前言 我之前开了好几年的云服务器了,实际上使用场景并不是很多,感觉有点浪费…

01|Oracle学习(监听程序、管理工具、PL/SQL Developer、本地网络服务介绍)

基础概念 监听程序:运行在Oracle服务器端用于侦听客户端请求的程序。 相当于保安,你来找人,他会拦你,问你找谁。他去帮你叫人过来。 配置监听程序应用场景 Oracle数据库软件安装之后没有监听程序(服务)…

Leetcode | Binary search | 22. 74. 162. 33. 34. 153.

22. Generate Parentheses 要意识到只要还有左括号,就可以放到path里。只要右括号数量小于左括号,也可以放进去。就是valid的组合。recurse两次 74. Search a 2D Matrix 看成sorted list就好。直接用m*n表示最后一位的index,并且每次只需要 …

软件测试员的非技术必备技能

成为软件测试人员所需的技能 非技术技能 以下技能对于成为优秀的软件测试人员至关重要。 将您的技能组合与以下清单进行比较,以确定软件测试是否适合您 - 分析技能:优秀的软件测试人员应具备敏锐的分析能力。 分析技能将有助于将复杂的软件系统分解为…

【论文阅读】The Deep Learning Compiler: A Comprehensive Survey

论文来源:Li M , Liu Y , Liu X ,et al.The Deep Learning Compiler: A Comprehensive Survey[J]. 2020.DOI:10.1109/TPDS.2020.3030548. 这是一篇关于深度学习编译器的综述类文章。 什么是深度学习编译器 深度学习(Deep Learning)编译器将…

Hbase基础概念

HBase 一、HBase的数据模型1.HBase数据存储结构2.HBase存储概念3.HBase基本架构 二、HBase Shell1.DDL(Data Definition Language)1.namespace2.table 2.DML(Data Manipulation Language)1.写入数据2.读取数据3.删除数据 三、HBase组成架构1. Master架构…

相对位置编码和绝对位置编码

位置编码的区别: 相对位置编码和绝对位置编码是两种不同的位置编码方法。 绝对位置编码是一种基于位置嵌入的方法,其中每个位置都被分配了一个唯一的位置向量。这些向量是固定的,与输入序列的内容无关。这种编码方式对于处理较短的序列效果…

【外卖系统】文件上传与下载

文件上传 文件上传又称upload,将本地图片、视频等文件上传到服务器上,供其他用户下载或者浏览。 form表单:HTML中的form元素用于创建一个包含表单字段的区域,用户可以在该区域输入数据,并通过提交表单将数据发送到服务…

爬虫的基本原理:爬虫概述及爬取过程

前言 随着互联网的不断发展和普及,我们的生活越来越离不开网络。而网络世界中有着海量的信息和数据,这些信息和数据对于我们的工作和生活都有很大的帮助。但是,如何高效地获取这些数据呢?这时候,爬虫这个工具就派上用…

【并发专题】深入理解并发可见性、有序性、原子性与JMM内存模型

目录 前置知识课程内容一、JMM模型1.什么是JMM模型2.JMM内存区域模型3.JMM内存模型与硬件内存架构的关系4.JMM存在的必要性5.数据同步八大原子操作6.指令重排现象与并发编程的可见性,原子性与有序性问题指令重排现象可见性,原子性与有序性 7.JMM如何解决…

Apache Storm入门介绍之三分钟看懂Apache Storm

文章目录 0.前言1. 什么是 Apache Storm?1.1. Nimbus1.2. Zookeeper1.3. Supervisor1.4. Worker1.5 集群模式下各组件职责 2. 核心概念2.1基本架构和任务模型2.2 工作流程 3. 源码地址3.1. 代码结构3.1. 核心模块介绍 4. Storm入门实例0.创建java工程并引入依赖1. 创…

Mysql 查询统计最近12个月的数据

包括当月: SELECTt1.yf AS month,count( t2.uuid ) AS total FROM(SELECTDATE_FORMAT(( CURDATE()), %Y-%m ) AS yf UNIONSELECTDATE_FORMAT(( CURDATE() - INTERVAL 1 MONTH ), %Y-%m ) AS yf UNIONSELECTDATE_FORMAT(( CURDATE() - INTERVAL 2 MONTH ), %Y-%m ) AS yf UNION…

使用vim-cmd工具给ESXi虚机定期打快照

VMware虚拟化 - 建设篇 第四章 使用vim-cmd工具给ESXi虚机定期打快照 VMware虚拟化 - 建设篇系列文章回顾使用vim-cmd工具给ESXi虚机定期打快照前言前提条件ESXi新增执行快照备份的sh脚本ESXi添加crond任务并使其生效ESXi指定部分虚拟机不执行定期快照(附加)虚拟机自定义属性…

Apache RocketMQ 远程代码执行漏洞(CVE-2023-37582)

​ 漏洞简介 Apache RocketMQ是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。CVE-2023-37582 中,由于对 CVE-2023-33246 修复不完善,导致在Apache RocketMQ NameServer 存在未授权访问的情况下,攻击者可构造恶意请求以RocketMQ运…

韦东山Linux驱动入门实验班(5)LED驱动---驱动分层和分离,平台总线模型

前言 (1)前面已经已经详细介绍了LED驱动如何进行编写的代码。如果韦东山Linux驱动入门实验班(4)LED驱动已经看懂了,驱动入门实验班后面的那些模块实验,其实和单片机操作差不太多了。我就不再浪费时间进行讲…