现象:很简单的sql,第一次执行6秒,第二次0秒,由于没有使用绑定变量,换个条件后又是6秒...
每个dba的夺命三问:
1 怎么解决?
2 是不是bug?
3 怎么昨天没事?
任务紧急,大量跑批任务等着呢,较劲的时候到了
先看统计信息,收集了一下,没效果。
再看执行计划,嗯,很简单
但是怎么还提示动态采样呢?不是有统计信息吗?
奇怪
还是老方法,上10046,看看内部到底在干啥呢?
-
sqlplus / as sysdba
-
alter session set events '10046 trace name context forever,level 12';
-
执行有问题的 sql 语句
-
alter session set events '10046 trace name context off';
-
select value from v$diag_info where name='default trace file';
然后将这个trc文件格式化一下
tkprof orcl1_ora_10033.trc b.txt
more b.txt 看到很多奇怪信息
-
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 /* qb_name("innerquery") no_index_ffs( "xxx") */ 1 as c1 from
-
"aaar"."xxx" sample block(0.137793, 8) seed(1) "xxx" where
-
("xxx"."bbbb"=10) and ("xxx"."ccc"='b3637') and ("xxx"."dddd"=
-
'20210730')) innerquery
好,上mos,搜关键字:ds_svc (关键字见水平)
这时听客户反馈,有人发现数据库里有大量latch free
搜索一番
好
很好
数据库版本是12.1.0.2,官方文档(doc id 2686026.1)说:
又找到一篇(doc id 2102499.1),很符合了:
alter system set "_optimizer_ads_use_result_cache" = false; -- 全篇精华
awr中确认
主要等待事件就一个latch free(高手会很快去搜索 latch stat,高高手则慢慢从上往下看)
时间模型统计像硬解析
top sql 很华丽:
result cache: rc latch 的失败率是 82.27%
addm中就有些上头了
硬解析过多?的确是没有用绑定变量,但改为绑定变量也不解决问题,何况之前一直没事
finding 2 还靠点谱
总之,又是靠隐含参数挽救了大家,result cache这个新特性又坑了大家。
继续看其他文档
错误 20636003 - 由动态采样 (ds_svc) 查询引起的缓慢解析(可能产生副作用 ora-12751/ora-29771)(文档 id 20636003.8)
不明白为什么基线选型那么着急,等等19c不好吗?
后继:请看下一篇《动态采样123》
阅读(2268) | 评论(0) | 转发(0) |