我在客户端的9i服务器上安装了一个PHP驱动的应用程序(Oracle9i发行版9.2.0.1.064位)。某些查询的性能很差(它可以用15分钟到几个小时来计算执行计划!)我将问题跟踪到OPTIMIZER_FEATURES_ENABLE参数的一个非默认值: 9i的默认值是9.2.0,但客户将其更改为8.1.7。当我在开发框中进行相同的更改时,我会遇到相同的性能问题。
如果他们运行的是Oracle10或更高版本,我可以自己为自己的会话更改它,但是需要为整个实例设置在9i中,它是一个静态参数。这个改变是为了支持一个非常重要的遗留项目而在一段时间前进行的。客户目前正在等待第三方供应商的答复,但我觉得改变的可能性很小。
所以,如果帕拉姆需要保持原状,我有什么选择?它的效果可以用其他可变的设置来模仿吗?还有别的主意吗?
发布于 2011-07-18 10:43:01
因为您的OPTIMIZER_FEATURES_ENABLE是8.1.7,所以OPTIMIZER_MAX_PERMUTATIONS是违约到很高的价值。幸运的是,此参数是动态的,因此您可以只为会话设置它,而不影响遗留应用程序。
发布于 2011-07-18 10:32:05
在这种极端情况下,优化器对计划的选择很差,或者无法在合理的时间内构建计划,您可以尝试使用提示强制执行计划。
在类似于您的旧应用程序和旧版本数据库的场景中,通过遵循post 完全暗示乔纳森·刘易斯中描述的方法,我成功地解决了优化器的一个明显缺陷。
发布于 2011-07-18 10:50:51
您可以尝试使用optimizer_max_permutations (默认80000)来减少用于构建计划的组合数量。
在我看来,您的客户需要很好的帮助,迁移到11 gR2将是朝着更好的方向迈出的一步。在查询调优方面有大量的自动帮助,而在上一个版本中,这些帮助必须手工完成。我的猜测是,这个旧版本也是为什么供应商需要这么长时间才能对问题做出反应的原因。
https://dba.stackexchange.com/questions/3916
复制相似问题