1.1 生成执行计划

在Oracle中,任何一条语句在解析过程中都会生成一个唯一的数值标识,即SQL_ID。而同一条语句,在解析过程中,可能会因为执行环境的改变(例如某些优化参数被改变)而生成多个版本的游标,不同的游标会有不同的执行计划。每个游标都会按顺序赋予一个序列号,即CHILD_NUMBER,一条语句生成的第一个游标的CHILD_NUMBER为0;相应的,Oracle会为每个执行计划生成一个哈希值以作区分。而多个不同版本的游标,其执行计划可能会相同,也可能不同。
因此,我们可以知道,一条合法的SQL语句在执行过后,在内存中最少会有一个执行计划与其游标相对应。当前实例内存(Library Cache)中的执行计划可以通过视图V$SQL_PLAN读取(RAC环境中,可以通过视图gv$sql_plan查看RAC当中其他实例上的执行计划)。在启用了自动负载知识库(Automatic Workload Repository,AWR,10g及以后版本),Oracle会将内存中的执行计划存储在历史数据当中,我们可以通过查询语句或者Oracle提供的包DBMS_XPLAN从历史数据中读取。此外,从10g开始,Oracle还提供一个自动优化工具DBMS_SQLTUNE对单个或一组语句进行自动优化,它可以在一段时间内捕捉内存中语句和执行计划来生成一组SQL集(或者称SQL调优集,SQL Tuning Set),我们同样可以从SQL集中读取和显示语句的执行计划。在11g当中,Oracle又引入了SQL执行计划管理(SQL Plan Management)的特性,可以将语句的一个或多个执行计划存储在一个执行计划基线(Plan Baseline)当中,我们同样可以读取基于执行计划基线生成的计划。
提示:AWR的历史数据、执行计划基线都是有保存期限的,可以通过相关参数设置。
除了通过执行SQL让Oracle处理引擎在内存中生成执行计划外,我们还可以通过命令Explain Plan让优化器仅对SQL语句进行解释,生成查询计划。由于语句并不会实际执行,因此它可以含有没有赋值的绑定变量。
执行Explain Plan命令后,Oracle会将解释生成的查询计划插入表SYS.PLAN_TABLE$(10g之前,表名为PLAN_TABLE;10g之后,通过公共同义词PLAN_TABLE指向SYS.PLAN_TABLE$)中。我们就可以通过查询语句或者Oracle提供的包DBMS_XPLAN从该表中读取查询计划。注意,通过Explain Plan解释出来的查询计划不会被缓存到内存中以便在语句执行时重用,我们在缓存当中看到的是类似“explain plan for ”的形式。
要注意的是,如果要解析语句的执行计划,用户必须拥有语句中对象及其依赖对象的权限。如果语句中存在视图,用户必须有对视图依赖表的查询权限。例如,当一个用户A基于表T创建了一个视图V,并将视图的查询权限赋予了用户B,那么用户B仅能通过视图查询表的数据,但无法直接调用Explain Plan命令解析基于该视图的查询的执行计划。

《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一1.1 生成执行计划相关推荐

  1. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一第一篇 执行计划

    第一篇 执行计划 执行计划是指示Oracle如何获取和过滤数据.产生最终结果集,是影响SQL语句执行性能的关键因素.我们在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让SQL ...

  2. oracle层级计算推演,(特价书)Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解(资深Oracle专家黄玮十年磨一剑,盖国强作序力荐)(china-pub首发)...

    第一篇 执 行 计 划 执行计划是指示Oracle如何获取和过滤数据.产生最终结果集,是影响SQL语句执行性能的关键因素.我们在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让 ...

  3. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一2.2 内部函数与操作

    2.2 内部函数与操作 实际上,在Oracle内部,执行计划的每一个数据源(Row Source)操作都与一个内部函数(qer<*>)相对应,而操作对象.谓词条件都是这些函数的参数.这些函 ...

  4. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一2.3 执行计划各个列的含义...

    2.3 执行计划各个列的含义 在执行计划中,除了ID.Operation和Name之外,还有其他一些列.这些列的数据是根据需要从PLAN_TABLE.V$SQL_PLAN.V$SQL_PLAN_STA ...

  5. mysql sql优化与调优机制详解_MySQL之SQL优化详解(一)

    目录 序言: 在我面试很多人的过程中,很多人谈到SQL优化都头头是道,建索引,explain分析,like全模糊会导致索引失效 云云,于是我问道:优化之前,需要找出数据库中比如超过2s的慢SQL,你是 ...

  6. Oracle 高性能SQL引擎剖析----执行计划

    执行计划是指示Oracle如何获取和过滤数据.产生最终结果集,是影响SQL语句执行性能的关键因素.我们在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让SQL引擎为语句生成执行 ...

  7. SQL Server中通用数据库角色权限的处理详解

    SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...

  8. 搜索引擎排名优化与五个技巧详解

    对于搜索引擎排名,每个SEO人员都有自己的独门秘籍,通常它都会根据自己所处的行业,进行有针对性的优化,但万变不离其宗,对于任何行业,它的排名机制,都是建立在满足一定搜索需求的基础之上. 言外之意,万丈 ...

  9. 【JVM】四、JVM优化-GC调优

    传送门 [JVM]一.JVM体系结构 [JVM]二.JVM垃圾收集器 [JVM]三.JVM内存溢出问题分析查看 [JVM]四.JVM优化-GC调优 上一篇:[JVM]三.JVM内存溢出问题分析查看 文 ...

最新文章

  1. javascript-对混合字母/数字数组进行排序
  2. Flutter控件--Switch 和 SwitchListTile
  3. ClickHouse系列教程七:centos下源码编译安装及报错解决
  4. Eclipse中更改JDK版本,解决ant编译报错的问题
  5. c语言 二进制输出_程序员入门C语言,需要掌握的4个基础知识
  6. Self Service Password (SSP)
  7. mysql怎么写Connection_MySQL里面的CONNECTION_ID
  8. Entity Framework 5.0系列之约定配置
  9. junit基础学习之-断言注解(3)
  10. 四元数,欧拉角,旋转矩阵相互转换
  11. 百度小程序html转码,百度小程序全局配置
  12. Airflow 中文文档:用Dask扩展
  13. 平方根的计算(二分逼近、牛顿拉普生法)
  14. 程序员所需要的数学知识都这里了
  15. linux中找不到vim命令
  16. 【学习笔记】matlab进行数字信号处理(一)生成信号及信号的时域频域分析
  17. 如何取消WPS 2019启动就显示稻壳商城?关闭后如何打开?
  18. matlab中if语句的条件,matlabif条件语句
  19. 开通了个人微信公众号:slbGTD,准备把GTD相关的内容写成一本书
  20. vue项目echart飞线地图

热门文章

  1. Android提示框与通知的使用
  2. Web性能优化实践——应用层性能优化
  3. Java的SPI机制
  4. MySQL常用性能分析方法-profile,explain,索引
  5. Linux内存管理大图(第三稿)
  6. AWS攻略——使用S3托管静态网页
  7. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Select模型
  8. 一种注册表沙箱的思路、实现——注册表的一些基础知识
  9. npm导入bootstrap_vue cli3.0如何通过npm引入jquery和bootstrap?
  10. 信息安全 数据赛 铁人三项_2018信息安全铁人三项数据赛题解