Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3541198
  • 博文数量: 715
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7745
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(715)

文章存档

2023年(75)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

最近访客

分类: Oracle

2021-08-05 20:27:02


现象:很简单的sql,第一次执行6秒,第二次0秒,由于没有使用绑定变量,换个条件后又是6秒...

每个DBA的夺命三问:
1 怎么解决?
2 是不是BUG?
3 怎么昨天没事?

任务紧急,大量跑批任务等着呢,较劲的时候到了

先看统计信息,收集了一下,没效果。
再看执行计划,嗯,很简单


但是怎么还提示动态采样呢?不是有统计信息吗?

奇怪
还是老方法,上10046,看看内部到底在干啥呢?

  1. sqlplus / as sysdba
  2. alter session set events '10046 trace name context forever,level 12';
  3. 执行有问题的 sql 语句
  4. alter session set events '10046 trace name context off';
  5. select value from v$diag_info where name='Default Trace File';

然后将这个trc文件格式化一下
tkprof orcl1_ora_10033.trc b.txt
more b.txt 看到很多奇怪信息

  1. SELECT /* DS_SVC */ /*+ dynamic_sampling(0) no_sql_tune no_monitoring
  2.   optimizer_features_enable(default) no_parallel result_cache(snapshot=3600)
  3.   */ SUM(C1)
  4. FROM
  5.  (SELECT /*+ qb_name("innerQuery") NO_INDEX_FFS( "XXX") */ 1 AS C1 FROM
  6.   "AAAR"."XXX" SAMPLE BLOCK(0.137793, 8) SEED(1) "XXX" WHERE
  7.   ("XXX"."BBBB"=10) AND ("XXX"."CCC"='B3637') AND ("XXX"."DDDD"=
  8.   '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》
阅读(2469) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~