现象:很简单的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》
阅读(2718) | 评论(0) | 转发(0) |