1

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

有没有办法从 Oracle 服务器获取诊断输出,以说明 CBO 研究了哪些替代方案,以及为什么它们被丢弃?

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

4

1 回答 1

3

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

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

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

于 2009-07-14T12:50:41.107 回答