Tag Archives: CBO

Oracle CBO 的 _sort_elimination_cost_ratio 参数

连续看到几个和 Oracle 优化器隐含参数 _sort_elimination_cost_ratio 相关的优化案例(Refer Refer )。

如果用 _SORT_ELIMINATION_COST_RATIO 作为关键字在 Metalink 上查询,会发现很多和该参数有关的 Bug ,执行计划的出错特征是也走了索引,但是走了索引全扫描(INDEX FULL SCAN),如果做 10053 Trace ,会发现有个烦人的 Recost for ORDER BY 步骤,然后就会引到错误的执行计划上。

在 9i 升级到 10g 最容易遇到这个问题(原来好好的,到了 10g 发现执行计划有问题了). 出问题的 SQL 一般是走 INDEX RANGE SCAN 然后有个 ORDER BY 会触发,更多的时候优化器模式是 FIRST ROWS — 这样 Oracle 会尽量消除排序,默认认为排序是开销昂贵的操作。通过控制 _SORT_ELIMINATION_COST_RATIO 隐含参数的值 (默认是0) 能够解决这个问题:

ALTER SESSION SET "_SORT_ELIMINATION_COST_RATIO"=5 

其它可能的解决办法:对索引里面的排序保持和 SQL 里的 ORDER by 一致。

其实说白了,很多 Oracle 隐含参数就是为了解决 Oracle 特定情况下的 Bug 的,因为不具备普遍性,所以在某些版本中作为隐含参数出现。在生产数据库上,个别的时候启用隐含参数倒也不是不行的,只要明白了相应的隐含参数到底是干啥的就成了。

题外话:_SORT_ELIMINATION_COST_RATIO 相关的 Bug 频繁出现,倒是感觉和 Oracle 内部代码管理有关,本来应该消除掉的,怎么后面的版本又跑了出来?

目前关于 CBO 最好的书籍应该是Jonathan Lewis 的 Cost-Based Oracle Fundamentals ,有中文译本:《基于成本的Oracle优化法则》。是 DBA 不可错过的一本书。

EOF

关于 CBO 的文档

昨天我提到过, The Search for Intelligent Life in the Cost-Based Optimizer 是最经典的两篇关于 CBO 的文档之一. 有朋友问我, 另外一篇是什么?
其实我说的另一篇就是 Wolfgang BreitlingA Look under the Hood of CBO: The 10053 Event. 这篇文档最早出现在 2002 年,如同名字暗示的,内容重点在 10053 事件的解释上.反复阅读之后, 相信对 CBO 已经有所理解的朋友都能够利用这篇文档中的信息对跟踪文件的信息进行解释了.Wolfgang Breitling 还写了很多关于 Oracle 优化器的论文. 喜欢研究的朋友不妨找找这些文章的漏洞.

继续阅读

此文作者:, 位于 Database 分类 标签: , on .
转载须以超链接形式标明文章原始出处和作者信息及版权声明.

Cost Based Oracle – Volume 1

此前我曾经提到过,Jonathan Lewis 可能在写一本有关 CBO 的新书.最近从他的站点上看到,他的新书 Cost Based Oracle – Volume 1 就要出版了.

Volume 1 of Cost Based Oracle covers the fundamentals of Oracle’s optimizer. The topic is just too big for me to be able to tell you all you need to know about every possible circumstance and every version – but this book gets you going with 90% of what you need to know for 90% of the SQL you will write. Not only does it explain the models used, the calculations, and the things that can happen at run-time; it gives you scripts so that you can reproduce the test-cases on your own systems and see the changes that appear as you change parameter values, enable or disable features, add hints, or upgrade your version of Oracle.

Jonathan 的写作态度一向很严谨.相对来说,不算很高产的作家.但是他在 dbazine 上的每一篇文篇章都会引起很大的关注.他的代表作品当然是 Practical Oracle8i — Designing Efficient Databases .虽然有个 8i 的题目,不过这本书即使是在10g 快开始风行的今天仍然又非常大的参考价值.

继续阅读