1

我们在生产环境中遇到了性能问题。

我们发现 Oracle 正在使用不正确的索引执行查询。

查询在其 WHERE CLAUSE 中包含主键的所有列(仅此而已)。

重建索引和收集统计信息后,Oracle 开始使用 PK_INDEX。并且执行计划指示索引唯一扫描。

它工作了一段时间,然后 Oracle 再次开始使用错误索引。它使用的索引现在由 2 列组成,其中只有 1 列出现在查询的 WHERE 子句中。现在执行计划指示INDEX RANGE SCAN,系统很慢。

请让我知道我们如何才能找到这个问题的根源。

4

1 回答 1

4

再次尝试收集统计信息。如果您获得了预期的执行计划,则意味着自上次收集统计信息以来对表所做的更改使 oracle 认为最不喜欢的执行计划更好。

所以,你的问题真的是“我怎样才能保持计划的稳定性?”

你有几个选择

  1. 在查询中使用提示来指示确切的访问路径。
  2. 使用 轮廓

我个人不喜欢这两种方法,因为如果您的数据将来会以执行计划应该改变的方式发生变化,那么您将获得糟糕的性能。

所以第三个选项(也是我个人最喜欢的)是

  1. 启用定期统计收集。Oracle 知道发现更改并逐步更新相关统计信息。
于 2013-08-21T05:20:07.740 回答