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

执行计划未变,逻辑读增长的跟况多数情况下原因如下:
根据分析历史执行情况,及表的数据,基本排除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