我在客户端的9i服务器(Oracle9i版本9.2.0.1.0 – 64位产品)中安装了PHP驱动的应用程序。 某些查询的性能非常糟糕(它可以使用15分钟到几个小时来计算执行计划 !),我已经将问题追踪到OPTIMIZER_FEATURES_ENABLE参数的非默认值:9i的默认值是9.2.0但客户将其更改为8.1.7 。 当我在开发箱中做同样的改变时,我遇到了同样的性能问题。
如果他们运行Oracle 10或更高版本,我可以自己更改它,但是在9i中,它是一个需要为整个实例设置的静态参数。 一段时间以前,这个改变是为了支持一个非常重要的传统计划。 客户正在等待第三方供应商的回答,但是我感觉有一点改变的机会。
那么,如果参数需要保持不变,那么我有什么select呢? 其效果可以用其他可变设置来模拟吗? 任何其他的想法?
你可以尝试其他提示(例如/ * + RULE * /)来强制优化器在特定的方向。
但基本上,你正在采取非常旧的软件(和一个未修补/不支持的版本),并迫使它像一个更旧的版本。 我真的不能想象它需要几个小时才能派生出一个执行计划,所以这听起来像是你正在碰到一个bug(或实际执行SQL和回滚)。
做一个基本的解释计划select…..
回到目前为止,它使用了一个共同的表来解释计划,所以之后做一个COMMIT;
如果这不会立即返回,请检查v $ session中发生了什么。 几乎所有的表统计等应该在caching,所以我不希望有任何磁盘等待,我很难弄清楚什么可能会导致一个非常长的查询parsing。