暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
踩坑CBO,解决那些坑爹的SQL优化问题 - SQL优化 - dbaplus社群:围绕Data、Blockchain、AiOps的企业级专业社群。技术大咖、原创干货,每天精品原创文章推送,每周线上技术分享,每月线下技术沙龙。.pdf
243
18页
2次
2021-12-02
5墨值下载
踩坑CBO,解决那些坑爹的SQL优化问题 - SQL优化
丁俊 2017-02-27 09:45:19
本文根据DBAplus社群第93期线上分享整理而成。
讲师介绍
丁俊
新炬网络首席性能优化专家
SQL审核产品经理
DBAplus社群联合发起人,《剑破冰山-Oracle开发艺术》副主编。
Oracle ACEA,ITPUB开发版资深版主,十年电信行业从业经验。
本次分享大纲:
1. CBO优化器存在哪些坑
2. CBO优化器坑的解决之道
3. 加强SQL审核,将性能问题扼杀于襁褓之中
4. 分享现场FAQ
CBO( Cost Based Optimizer)优化器是目前Oracle广泛使用的优化器,其使用统计信息、查询转换等计算各种
可能的访问路径成本,并生成多种备选执行计划,最终Oracle会选择成本最低的作为最优执行计划。与“远
古”时代的RBO(Rule Based Optimizer)相比,显然更加符合数据库实际情况,能够适应更多的应用场景。但
是,由于其自身非常复杂,CBO并未解决的实际问题以及存在的BUG非常多,在日常优化过程中,你可能会遇
到一些,不管怎么收集统计信息,都无法走正确执行计划的情形,这时候,你可能踩坑CBO了。
本次分享,主要以日常常见优化器问题作为引子,一起探讨CBO的那些坑的解决之道。
一、CBO优化器存在哪些坑
先来看一下,CBO优化器的组件:
从上图可以看出,一条SQL进入ORACLE中,实际上经过解析会将各部分进行分离,每个分离的部分独立成为一
个查询块(query blocks),比如子查询会成为一个查询块,外部查询又是一个查询块,那么ORACLE优化器要做
的工作就是各查询块内部走什么样的访问路径更好(走索引、全表、分区?),其次就是各查询块之间应该走
什么样的JOIN方式以及JOIN顺序,最终计算出那种执行计划更好。
优化器的核心就是查询转换器、成本估算器以及执行计划生成器。
Transformer(查询转换器)
从图上可以看出,优化器的第一核心装置就是查询转换器,查询转换器的主要作用就是研究各种查询块之间的
关系,并从语法上甚至语义上给予SQL等价重写,重写后的SQL更容易被核心装置成本估算器和执行计划生成器
处理,从而利用统计信息生成最优执行计划。
查询转换器在优化器中有两种方式:启发式查询转换(基于规则)和基于COST的查询转换。启发式查询转换的一
般是比较简单的语句,基于成本的一般比较复杂,也就是说,符合基于规则的ORACLE不管什么情况下都会进行
查询转换,不符合的ORACLE可能考虑基于成本的查询转换。启发式查询转换历史悠久,问题较少,一般查询转
换过的效率比不经过查询转换的要高,而基于成本的查询转换,因其与CBO优化器紧密关联,在10G引入,内部
非常复杂,所以BUG也比较多,在日常优化过程中,各种疑难SQL,往往就出现在查询转换失败中,因为查询转
换一旦失败,Oracle就不能将原始SQL转换成结构更良好的SQL(更易于被优化器处理),显然可选择的执行路
径就要少很多,比如子查询不能UNNEST,那么,往往就是灾难的开始。其实,查询转换中Oracle做的最多的就
是将各种查询转换成JOIN方式,这样就可以利用各种高效的JOIN方法了,比如HASH JOIN。
查询转换共有30种以上的方式,下面列出一些常见启发式和基于COST的查询转换。
启发式查询转换(一系列的RULE):
很多启发式查询转换在RBO情况下就已经存在。常见的有:
of 18
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜