暂无图片
记一起data blocks consistent reads - undo records applied导致的逻辑读突增案例分析
最近更新:2022-07-06 09:21:21

适用范围

Oracle Database 11.2 及以上版本

问题概述

做历史性能分析时,2022-6-28 20:00-21:00左右DB TIME突增,定位到一条简单的SQL占比很高,执行计划未变化,但逻辑读翻了几百倍,这里为类似问题提供一个分析思路。

SQL执行计划 image.png 历史执行情况 image.png

问题原因

执行计划未变,逻辑读增长的跟况多数情况下原因如下:

  • 数据量变化
  • 查询条件不同,数据分布存在倾斜
  • 当时有大量DML、或者大事务,需要大量读取UNDO,沟通CR块。

根据分析历史执行情况,及表的数据,基本排除1,2个可能性,我们往读取UNDO构造CR块的方向分析。

1、通过ASH分析读取的数据所在表空间,定位到大量坊取了UNDO with t as (select CURRENT_OBJ#,CURRENT_FILE#,count(*) cnt from dba_hist_active_sess_history where instance_number=1 and sample_time between to_date('2022-06-28 20:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2022-06-28 21:00:00','yyyy-mm-dd hh24:mi:ss') and sql_id='9n67ypfbdrc8q' group by CURRENT_OBJ#,CURRENT_FILE#) select b.tablespace_name,sum(cnt) cnt from t a,dba_data_files b where a.CURRENT_FILE#=b.file_id group by b.tablespace_name order by cnt desc;

TABLESPACE_NAME                       CNT
------------------------------ ----------
UNDOTBS1                             3398
DATA111                                78
DATA222                                77
IDX111                                 35

2、从AWR中的统计data blocks consistent reads - undo records applied,看到明显增长 select st.instance_number,st.snap_id,to_char(SN.BEGIN_INTERVAL_TIME,'yyyy-mm-dd hh24:mi')BEGIN_INTERVAL_TIME, (value-(lag(value) over(partition by st.instance_number order by st.snap_id ))) "value" from dba_hist_sysstat st

......