Oracle将执行切换计划转换为错误的索引

时间:2013-08-21 04:45:34

标签: oracle oracle10g database-performance query-performance

我们的生产环境存在性能问题。

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

查询在WHERE CLAUSE中有主键的所有列(没有别的)。

重建索引和收集统计信息后,Oracle开始使用PK_INDEX。并且执行计划表明了Index Unique Scan。

它运行良好一段时间,然后Oracle又开始使用错误的索引。它现在使用的索引包含2个列,其中只有1个列出现在查询的WHERE CLAUSE中。现在执行计划表明INDEX RANGE SCAN并且系统非常慢。

请告诉我们如何找到这个问题的根源。

1 个答案:

答案 0 :(得分:4)

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

所以,你这里的问题确实是“我如何保持计划的稳定性?”

你有几个选择

  1. 在查询中使用提示来指示确切的访问路径。
  2. 使用 outlines
  3. 我个人不喜欢这两种方法,因为如果您的数据将来会以执行计划应该改变的方式发生变化,那么您将会遇到糟糕的表现。

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

    1. 启用periodic statistics gathering。甲骨文知道要发现 更改并逐步更新相关统计信息。