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

在深入了解执行计划之前,我们先了解SQL语句的处理执行过程。当一条语句提交到Oracle后,SQL引擎会分为三个步骤对其处理和执行:解析(Parse)、执行(Execute)和获取(Fetch),分别由SQL引擎的不同组件完成。SQL引擎的组件如图1-1所示。

1. SQL编译器(SQL Compiler)

将语句编译到一个共享游标中。SQL编译器由解析器(Parser)、查询优化器(Query Optimizer)和行源生成器(Row Source Generator)组成。

(1)解析器(Parser)—执行对SQL语句的语法、语义分析,将查询中的视图展开、划分为小的查询块。

(2)查询优化器(Query Optimizer)—为语句生成一组可能被使用的执行计划,估算出每个执行计划的代价,并调用计划生成器(Plan Generator)生成计划,比较计划的代价,最终选择选择一个代价最小的计划。查询优化器由查询转换器(Query Transform)、代价估算器(Estimator)和计划生成器(Plan Generator)组成。

注意,上述优化器实际上指的是基于代价的优化器(Cost Based Optimizer,CBO),CBO也是当前采用的所有优化和调优技术的核心基础。

          查询转换器(Query Transformer)—查询转换器决定是否重写用户的查询(包括视图合并、子查询反嵌套),以生成更好的查询计划。

          代价估算器(Estimator)—代价估算器使用统计数据来估算操作的选择率(Selectivity)、返回数据集的势(Cardinality)和代价,并最终估算出整个执行计划的代价。

          计划生成器(Plan Generator)—计划生成器会考虑可能的访问路径(Access Path)、关联方法和关联顺序,生成不同的执行计划,让查询优化器从这些计划中选择出代价最小的一个计划。

(3)行源生成器(Row Source Generator)—行源生成器从优化器接收到优化的执行计划后,为该计划生成行源(Row Source)。行源是一个可被迭代控制的结构体,它能以迭代方式处理一组数据行、并生成一组数据行。

2. SQL执行引擎(SQL Execution Engine)

SQL执行引擎依照语句的执行计划进行操作,产生查询结果。在每一个操作中,SQL执行引擎会以迭代方式执行行源、生成数据行。

提示:当Oracle引入一些新的优化技术时,会出现一些新的组件,例如,SQL进化管理器(SPM)、SQL性能分析器(SPA)等,这些组件会与SQL引擎的组件融合,提供更好的优化和调优方法。

转载于:https://www.cnblogs.com/nexiyi/p/3448380.html

Oracle 高性能SQL引擎剖析----执行计划相关推荐

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

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

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

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

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

    1.1 生成执行计划 在Oracle中,任何一条语句在解析过程中都会生成一个唯一的数值标识,即SQL_ID.而同一条语句,在解析过程中,可能会因为执行环境的改变(例如某些优化参数被改变)而生成多个版本 ...

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

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

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

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

  6. 使用oracle sql profile固定执行计划

      2013-02-05 16:19:36 标签:oracle sql profile 版权声明:原创作品,如需转载,请与作者联系.否则将追究法律责任. 使用sql profile固定执行计划实验 1 ...

  7. oracle++spm,ORACLE 11G 使用SPM来调整SQL语句的执行计划

    跟大家说明一下: ITSM 数据库迁移升级到11G后,有几条SQL语句的执行计划不正确,而且这些语句都是使用绑定变量的. 最初的调整想法是获得这些的语句的绑定变量值,将获得的字面值直接替换SQL语句的 ...

  8. oracle数据库通过SQL profile 绑定SQL最优执行计划(个人实践)

    1.执行SQL语句,同时使用如下命令查找SQL ID select a.SQL_ID,b.SQL_TEXT,b.LAST_LOAD_TIME,b.LAST_ACTIVE_TIME   from v$s ...

  9. ORACLE 查看有多个执行计划的SQL语句

    在SQL优化过程,有时候需要查看哪些SQL具有多个执行计划(Multiple Executions Plans for the same SQL statement),因为同一个SQL有多个执行计划一 ...

最新文章

  1. UVALive2678:Subsequence
  2. rocksdb原理_手摸手学习 RocksDB 的 Write Buffer Manager
  3. webuploader在bootstrap模态对话框中选择文件按钮无效的问题
  4. 2017帝都租房攻略:昌平通州租金涨幅高达25%
  5. html5自动添加数据库,HTML5本地存储之如果没有数据库究竟会怎样
  6. 用户登录查全表好还是用用户名好_外贸人/货代人不要为海运难过了:请看如何查运价和调配舱位解决缺箱!...
  7. ecplice中class.forname一直报错_A6v5.1升级A6v7.0报错:调用Java代码
  8. Java ObjectInputStream close()方法与示例
  9. TCP/IP 四层模型
  10. Delphi下DLL调用以及共享数据库连接
  11. DbUtils操作数据库的用法
  12. VALSE学习(十七):VALSE 2019报告总结
  13. JSON正确的下载网址及编译
  14. 高中计算机评课,高二信息技术评课记录
  15. ROW_NUMBER() OVER的用法
  16. Sublime Text插件
  17. word | word一键排版 | word极速排版 | 真正的一键排版
  18. Eclipse 切换 SVN 地址
  19. 防火墙、waf、ips和ddos的部署
  20. 网络安全中非常好用的webshell检测工具!

热门文章

  1. Debug 和 Release 编译方式
  2. 垃圾邮件过滤 php,垃圾邮件过滤功能
  3. hikaridatasource 加密后登陆不上_python测试开发django42.auth模块登陆认证
  4. NLP(自然语言处理)详细笔记
  5. pytorch和jittor 程序对比
  6. zabbix3.2自动发现批量监控redis端口状态
  7. Gson源码解析和它的设计模式
  8. CF724F Uniformly Branched Trees
  9. 【评分】团队作业-随堂小测(同学录)
  10. How to run CAB file