我已经在客户端的 9i 服务器(Oracle9i Release 9.2.0.1.0 - 64bit Production)中安装了一个 PHP 驱动的应用程序。某些查询的性能很差(它可以使用 15 分钟到几个小时来计算执行计划!)我已经将问题跟踪到参数的非默认值OPTIMIZER_FEATURES_ENABLE
:9i 的默认值是9.2.0
但客户将其更改为8.1.7
. 当我在我的开发箱中进行相同的更改时,我遇到了相同的性能问题。
如果他们运行的是 Oracle 10 或更高版本,我可以自己为自己的会话更改它,但在 9i 中,它是一个需要为整个实例设置的静态参数。更改是在一段时间前进行的,目的是支持一个非常重要的遗留程序。客户目前正在等待第三方供应商的答复,但我觉得改变的可能性很小。
那么,如果参数需要保持不变,我有哪些选择?它的效果可以用其他可变设置来模拟吗?还有其他想法吗?
因为你OPTIMIZER_FEATURES_ENABLE
在8.1.7,OPTIMIZER_MAX_PERMUTATIONS
则默认为一个非常高的价值。幸运的是,这个参数是动态的,所以你可以只为你的会话设置它,而不会影响你的遗留应用程序。
在像这样的极端情况下,优化器选择了错误的计划或无法在合理的时间内构建计划,您可以尝试使用提示自行强制执行计划。
在与您的遗留应用程序和旧版本数据库类似的场景中,我已经按照Jonathan Lewis 的完整提示帖子中描述的方法设法解决了优化器的明显错误。
归档时间: |
|
查看次数: |
1734 次 |
最近记录: |