我们的生产环境存在性能问题。
我们发现Oracle正在使用不正确的索引执行查询。
查询在WHERE CLAUSE中有主键的所有列(没有别的)。
重建索引和收集统计信息后,Oracle开始使用PK_INDEX。并且执行计划表明了Index Unique Scan。
它运行良好一段时间,然后Oracle又开始使用错误的索引。它现在使用的索引包含2个列,其中只有1个列出现在查询的WHERE CLAUSE中。现在执行计划表明INDEX RANGE SCAN并且系统非常慢。
请告诉我们如何找到这个问题的根源。
答案 0 :(得分:4)
再次尝试收集统计信息。如果您获得了预期的执行计划,那么这意味着自上次统计数据收集以来对表所做的更改使得oracle认为最不喜欢的执行计划更好。
所以,你这里的问题确实是“我如何保持计划的稳定性?”
你有几个选择
我个人不喜欢这两种方法,因为如果您的数据将来会以执行计划应该改变的方式发生变化,那么您将会遇到糟糕的表现。
所以第三个选项(以及我个人最喜欢的)是