OPTIMIZER_FEATURES_ENABLE 的替代方案

OPTIMIZER_FEATURES_ENABLE 的替代方案

我在客户的 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 中,它是一个需要为整个实例设置的静态参数。这个更改是前段时间进行的,目的是支持一个非常重要的遗留程序。客户目前正在等待第三方供应商的答复,但我觉得更改它的可能性很小。

那么,如果参数需要保持不变,我有什么选择?可以使用其他可更改的设置来模拟其效果吗?还有其他想法吗?

答案1

您可以尝试其他提示(例如/* + RULE */)来强制优化器朝特定的方向发展。

但基本上,您使用的是非常旧的软件(而且是未打补丁/不受支持的版本),并强制其像更旧的版本一样运行。不过,我无法想象要花几个小时才能得出执行计划,所以听起来您遇到了错误(或者实际上执行了 SQL 并回滚)。

做一个基本的 EXPLAIN PLAN FOR SELECT .....

回顾过去,它使用一个公共表来解释计划,因此之后执行 COMMIT;

如果结果没有立即返回,请检查 v$session 中发生了什么。几乎所有表统计信息等都应该在缓存中,因此我预计不会有任何磁盘等待,而且我很难弄清楚还有什么可能导致非常长的查询解析。

相关内容