【IT168专稿】第三届Oracle技术嘉年华再度来袭!作为国内顶尖级别的Oracle数据库技术盛会,现场邀请到Jonathan Lewis,Tim Gorman等Oracle数据库领域国际级专家,特别为中国的数据库爱好者带来他们多年的总结与经验分享。

▲中航信工程师 Oracle ACE ACOUG成员崔华

在本次大会上,Oracle ACE崔华给我们带来了《Oracle数据库优化器探秘》的精彩分享。在崔华看来,开发阶段就应该做到SQL的设计和调优,并知道在Oracle数据库中怎么用好SQL,怎么做好优化,自己也写了一本书《基于Oracle的SQL优化》。历经17个月的时间,熬夜到1-2点,终于完成了这本书。在崔华看来,尽管书不一定能够大卖,但是可以保证每一个看到这本书的人都能获得巨大的收益。

▲基于Oracle的SQL优化

我们谈及数据库的优化,而通常数据库80%的问题是由SQL引起的,因此只要解决SQL问题,就能够解决数据库80%的问题。崔华表示,开发者和DBA要想做好Oracle数据库优化,一定要了解优化器,而且要深入的了解。

优化器(Optimizer)是Oracle数据库中内置的一个核心子系统,你也可以把它理解成是Oracle数据库中的一个核心模块或者一个核心功能组件,优化器的目的是按照一定的判断原则来得到它认为目标SQL在当前情形下最高效的执行路径(Access Path),也就是说优化器的目的就是为了得到目标SQL的执行计划。

依据选择执行计划时所用判断原则的不同,Oracle数据库里的优化器又分为RBO和CBO这两种类型。

▲Oracle数据库里SQL语句的执行过程

▲查找Shared Cursor的过程

Oracle数据库里SQL语句的执行过程-如果找到了Shared Cursor,优化器就可以滚粗了。

▲Oracle数据库里SQL语句的执行过程-如果找不到Shared Cursor,优化器这才粉墨登场

RBO的缺陷

1、选择执行计划时没有考虑目标SQL中所涉及到的各个对象的数据量、数据分布,只根据内置规则来决定执行计划——一招鲜、吃遍天。

2、执行计划一旦出了问题,我们很难对其做调整。

3、目标SQL的写法、甚至是目标SQL中所涉及到的各个对象在该SQL文本中出现的先后顺序和这些对象在数据字典缓存中的缓存顺序都可能会影响RBO对于该SQL执行计划的选择。

4、Oracle数据库中很多很好的特性、功能均不能在RBO下使用,因为它们均不被RBO所支持(例如哈希连接、函数索引等)。

CBO的局限

1、CBO会默认认为目标SQL语句where条件中出现的各个列之间是独立的,是没有关联关系的。

2、CBO会假设所有的目标SQL都是单独执行、并且是互不干扰的。

3、CBO对直方图统计信息有诸多限制:

-在Oracle 12c之前,Frequency类型的直方图所对应的Bucket的数量不能超过254。

-在Oracle数据库里,如果针对文本型的字段收集直方图统计信息,则Oracle只会将该文本型字段的文本值的头32个byte给取出来(实际上只取头15个byte)并将其转换成一个浮点数,然后将该浮点数作为上述文本型字段的直方图统计信息存储在数据字典里。

4、CBO在解析多表关联的目标SQL时,可能会漏选正确的执行计划。

CBO的优化方向

1、数据库的升级、统计信息的变更、CBO某些成本计算公式的先天不足等因素都会导致目标SQL执行计划的变更——这通常需要DBA来手工调整执行计划(手工调整执行计划太麻烦了,常常是按下了葫芦起了瓢),我们希望Oracle数据库能自适应的自动调整不理想的执行计划,而且最好是一旦发现苗头不对,马上调整!

2、自适应查询优化。

3、突破现有限制、持续优化已有功能。

▲Oracle 12c的自适应查询优化

自适应执行计划之Adaptive Join Methods

初始表连接方法还是和原先一样:取决于现有的统计信息

最后采用的表连接方法直到目标SQL执行过程中才会确定

执行计划中多了一个组件:Statistic collector,最后采用的表连接方法依赖于目标SQL执行过程中statistics collector收集到的运行时统计信息

需要在一定程度上缓存目标SQL的执行结果,不能像原先的嵌套循环连接那样马上把执行结果返回给用户。

自适应统计信息之Dynamic statistics

以前叫Dynamic sampling,现在叫Dynamic statistics

Dynamic statistics会缓存在SGA中,它是基于目标SQL语句的where条件的,这意味着Dynamic statistics可以被可以被不同的SQL语句所共享

Dynamic statistics可以作为纠正统计信息缺失、不准的一种补充手段

优化器会根据目标SQL语句本身、已有统计信息和目标SQL的执行时间来决定是否采用Dynamic statistics。

自适应统计信息之Statistics feedback

以前叫Cardinality feedback,现在叫Statistics feedback

在目标SQL执行过程中,如果执行计划中的预估统计信息和该SQL实际执行时的运行时统计信息存在巨大差异,那么该SQL下次执行时会硬解析,并且此时生成执行计划的依据会是之前执行时已经收集好的运行时统计信息

Cardinality feedback只会收集单表和group by的运行时统计信息,Statistics feedback还会额外收集表连接的运行时统计信息

Cardinality feedback所对应的运行时统计信息存储在Shared Cursor里,不能持久化;而Statistics feedback所对应的运行时统计信息虽然也不能持久化,但此时可以用SQL Plan Directives(SPD)来优雅的缓解运行时统计信息不能持久化的问题,并且SPD可以持久化

崔华 oracle简历,Oracle ACE崔华解析Oracle数据库优化器相关推荐

  1. Oracle 12c数据库优化器统计信息收集的最佳实践

    Oracle 12c数据库优化器统计信息收集的最佳实践 转载自     沃趣科技(ID:woqutech) 作者         刘金龙(译) 原文链接   http://www.oracle.com ...

  2. 【Oracle】看懂执行计划之基于规则的优化器(RBO)

    [Oracle]看懂执行计划之基于规则的优化器(RBO) 简介   基于规则的优化器(RBO)是通过编码在 Oracle 数据库中的一系列固定的规则,来决定目标 SQL 的执行计划.Oracle 事先 ...

  3. Oracle数据库优化器的优化方式

    Oracle是世界领先的信息管理软件开发商,因其复杂的关系数据库产品而闻名.本文介绍Oracle优化器,它是一个非常好用的工具.Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按 ...

  4. oracle向达梦迁移工作量,从Oracle安全移植到国产达梦数据库的DBA实践

    随着我国对信息安全和自主可控技术的日益重视,国产数据库在党政机关.军队和大型央企等行业中得到了快速应用.达梦数据库(以下简称DM)是国内数据库行业领军企业--达梦推出的一款自主可控的高性能数据库产品. ...

  5. Oracle优化04-Optimizer优化器

    思维导图 Optimizer概述 RBORule Based Optimizer RBO概述 案例说明 CBOCost Based Optimizer CBO概述 案例说明 全表扫描 索引扫描 思维导 ...

  6. 【转贴】大型ORACLE数据库优化设计方案

    大型ORACLE数据库优化设计方案 本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案. ...

  7. 实践实战:在PoC中的Oracle 12c优化器参数推荐(含PPT)

    最近,Oracle数据库优化器的产品经理 Nigel Bayliss 发布了一篇文档,介绍:Setting up the Oracle Optimizer for PoCs - 在PoC测试中优化器参 ...

  8. 大型ORACLE数据库优化设计方案

    关键字: oracle 数据库设计 k]B(jL@!sV 本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE ...

  9. Oracle中的优化器--CBO和RBO

    Oracle中的优化器--CBO和RBO Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的 ...

最新文章

  1. 自学编程的人,都是怎么找到自己的第一份工作的?
  2. 简述python常用的函数模块_Python学习笔记(十三)—函数常用模块
  3. jsfor循环终止_详解如何在JS代码中消灭for循环
  4. Redis持久化-RDB
  5. Java实习日记(2-2)
  6. java 其他文件转pdf_java 其他文件转成pdf java生成pdf
  7. 汽车标志你认识多少?爱车族一定要了解哦!
  8. 计算机系统引导失败怎么办,win7系统引导选择失败怎么办|win7系统引导选择失败的解决方法...
  9. 阿里巴巴大数据实践之数据建模
  10. 配置微信小程序添加企业微信为好友的组件
  11. Promise的使用
  12. IDEA括起选中的选中的内容
  13. 如何查询windows的版本号?
  14. 淘宝联盟扣分54分流量异常申诉成功
  15. 愿码(ChainDesk.CN):CoinBase Pro增加了对xrp的支持
  16. html滚动字幕js,js 实现滚动字幕
  17. Visual Studio 安装VSN插件
  18. 观点丨区块链的价值在于解决产业核心痛点
  19. XMind使用技巧1
  20. 2020年焊工(高级)考试题及焊工(高级)找答案

热门文章

  1. scratch2.0编写的大富翁游戏棋(下载资源)
  2. NENU 17级算法学习小组Round 3 0606
  3. 11.13蓝桥杯选拔赛热身赛题解——HH的LCM
  4. 【梅哥的Ring0湿润插入教程】第二课:Ring0实现读写SSDT
  5. vite启动后提示“Network: use `--host` to expose“,且无法通过网络IP访问服务
  6. Storm自定义调度器实现--DirectScheduler
  7. 该使用哪些工具来诊断和修复 JVM 内存调试的问题?
  8. A/B-test / diff in diff
  9. python操作wifi
  10. (01)ORB-SLAM2源码无死角解析-(65) BA优化(g2o)→闭环线程:Optimizer::OptimizeEssentialGraph→本质图优化