Oracle查询优化器的诊断输出

时间:2009-07-14 09:30:41

标签: database oracle performance query-optimization

在许多情况下,我们对Oracle基于成本的优化程序对查询执行计划做出的决策不满意。使用提示,不那么直接的查询转换,索引重组和实例参数,然后我们尝试将其引入我们认为更有意义的事情。它在黑暗中非常刺激,结果在开发,登台和生产服务器之间可能有很大差异(无论我们如何努力同步统计数据等)。

有没有办法从Oracle服务器获取诊断输出,以说明CBO已经考虑了哪些替代方案,以及它们被丢弃的原因?

我正在考虑像EXPLAIN PLAN这样的功能,除了它列举了所有可能的(或至少很多)执行计划及其相关成本。

1 个答案:

答案 0 :(得分:3)

通过收集10053跟踪事件转储,您可以更好地了解Oracle优化器如何做出决策。

我发现优化器很少做出“错误的”决策(好吧,不包括跨数据库链接的分布式查询),但通常会被不能准确表示数据性质和分布的统计数据误导。检查http://optimizermagic.blogspot.comhttp://www.jlcomp.demon.co.uk等资源,了解优化程序内部。

您还可以使用Oracle SQL Analyzer实用程序(额外费用)让优化程序考虑替代路径,如果找到更好的路径,它将至少生成新的和新的EXPLAIN PLANS以供比较。有时您可以根据此信息对次优计划的原因进行逆向工程(更常见的是,您会发现这是一个统计问题)