Database Oracle查询优化器的诊断输出

Database Oracle查询优化器的诊断输出,database,oracle,performance,query-optimization,Database,Oracle,Performance,Query Optimization,在许多情况下,我们对Oracle基于成本的优化器在查询执行计划方面所做的决策感到不满意。使用提示,而不是简单的查询转换,索引重组和实例参数,然后我们试图诱使它做我们认为更有意义的事情。这在很大程度上是在暗中摸索,结果在开发服务器、暂存服务器和生产服务器之间可能存在很大差异(无论我们多么努力地同步统计数据等等) 有没有办法从Oracle服务器获取诊断输出,以说明CBO考虑了哪些替代方案,以及它们被丢弃的原因 我正在考虑一个类似EXPLAIN PLAN的功能,只是它列举了所有可能(或至少许多)的执行

在许多情况下,我们对Oracle基于成本的优化器在查询执行计划方面所做的决策感到不满意。使用提示,而不是简单的查询转换,索引重组和实例参数,然后我们试图诱使它做我们认为更有意义的事情。这在很大程度上是在暗中摸索,结果在开发服务器、暂存服务器和生产服务器之间可能存在很大差异(无论我们多么努力地同步统计数据等等)

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


我正在考虑一个类似EXPLAIN PLAN的功能,只是它列举了所有可能(或至少许多)的执行计划及其相关成本。

通过收集10053个跟踪事件转储,您可以更好地了解Oracle optimizer是如何做出决策的

我发现优化器很少做出“错误”的决策(当然,不包括跨数据库链接的分布式查询),但通常会被无法准确表示数据的性质和分布的统计数据所误导。查看和等参考资料,了解优化器的内部结构


您还可以使用Oracle SQL分析器实用程序(额外的成本)使优化器考虑替代路径,如果找到一个更好的路径,它至少会生成用于比较的旧的和新的解释计划。有时,您可以根据这些信息对次优计划的原因进行逆向工程(更常见的情况是,您会发现这是一个统计问题)

您能提供一个解释计划的示例吗?