|
|
转到底部
|
|
文档内容
|
|
症状 |
|
|
更改 |
|
|
原因 |
|
|
解决方案 |
|
|
参考 |
适用于:
Oracle Database - Enterprise Edition - 版本 12.1.0.1 和更高版本本文档所含信息适用于所有平台
症状
- 在 12C 上看到大量的'latch free'等待 (无论是从低版本升级上来的还是新安装的)。
- 当检查 AWR 报告的时候,即使设置 RESULT_CACHE_MODE 为 MANUAL,在 latch statistics 部分显示了对"Result Cache: RC Latch"的高竞争。
-
所有使用 result cache 的 SQL 含有 DS_SVC 提示,也是动态的统计活动的一部分。例如 :
SELECT /* DS_SVC */ /*+ dynamic_sampling(0) no_sql_tune no_monitoring optimizer_features_enable(default) no_parallel result_cache(snapshot=3600) */ SUM(C1)
FROM (SELECT /*+ .......
更改
新安装或从低版本升级到 12C。
原因
这个问题的原因是默认情况下在 12C 启用了自动动态统计信息,自动决定动态统计信息是否是有用的和在所有的 SQL 语句上使用哪个统计级别。当优化器认为有必要的时候,它就会收集的动态统计信息。有关此功能的详细信息请参阅:
Document 2002108.1 Automatic Dynamic Statistics
当自动动态取样用于 SQL 语句,它可以决定,根据这些统计数据,对于这些 SQL 使用 result cache 是否可以获得更好的响应时间; 这会导致大量使用 result cache,从而导致了在 Result Cache: RC Latch 类型的 latch free 上的争用。
因此,这是预期的行为。
解决方案
使用下面的命令可以关闭自动动态统计信息使用结果缓存的机制:
alter system set "_optimizer_ads_use_result_cache" = FALSE;
