查詢引起redo日誌暴增的SQL語句--指令碼
阿新 • • 發佈:2019-02-06
此指令碼轉自樑敬彬老師的《收穫,不止SQL優化》,感謝老師的分享
redo日誌暴增會間接導致歸檔日誌數量增加,嚴重的會導致撐爆歸檔日誌的儲存空間,導致無法連線資料庫。
查詢最近幾天,每小時歸檔日誌產生數量--指令碼:
http://blog.csdn.net/u010692693/article/details/75309167
1. redo大量產生必然是由於大量產生"塊改變"。從awr檢視中找到"塊改變"最多的segment。
這是查詢最近2小時(120分鐘)的,begin_interval_time> sysdate - 120/1440修改查詢最近多少分鐘的select * from ( SELECT to_char(begin_interval_time, 'YYYY_MM_DD HH24:MI') snap_time, dhsso.object_name, SUM(db_block_changes_delta) FROM dba_hist_seg_stat dhss, dba_hist_seg_stat_obj dhsso, dba_hist_snapshot dhs WHERE dhs.snap_id = dhss.snap_id AND dhs.instance_number = dhss.instance_number AND dhss.obj# = dhsso.obj# AND dhss.dataobj# = dhsso.dataobj# AND begin_interval_time> sysdate - 120/1440 GROUP BY to_char(begin_interval_time, 'YYYY_MM_DD HH24:MI'), dhsso.object_name order by 3 desc) where rownum<=5; SNAP_TIME OBJECT_NAME SUM(DB_BLOCK_CHANGES_DELTA) ---------------- ------------------------------ --------------------------- 2017_07_19 01:00 TEST_REDO 222208 2017_07_19 01:00 WRH$_SYSMETRIC_HISTORY_INDEX 112 2017_07_19 01:00 WRH$_PARAMETER_PK 112 2017_07_19 01:00 WRM$_SNAPSHOT_DETAILS 80 2017_07_19 01:00 WRI$_ADV_PARAMETERS_PK 48
2. 從awr檢視中找出步驟1中排序靠前的物件涉及的SQL。
LIKE '%TEST_REDO%'中TEST_REDO是步驟1中查詢出來的OBJECT_NAME,可以替換您查詢的結果SELECT to_char(begin_interval_time, 'YYYY_MM_DD HH24:MI'), dbms_lob.substr(sql_text, 4000, 1), dhss.instance_number, dhss.sql_id, executions_delta, rows_processed_delta FROM dba_hist_sqlstat dhss, dba_hist_snapshot dhs, dba_hist_sqltext dhst WHERE UPPER(dhst.sql_text) LIKE '%TEST_REDO%' AND dhss.snap_id = dhs.snap_id AND dhss.instance_Number = dhs.instance_number AND dhss.sql_id = dhst.sql_id; TO_CHAR(BEGIN_INTERVAL_TIME,'Y DBMS_LOB.SUBSTR(SQL_TEXT,4000, INSTANCE_NUMBER SQL_ID EXECUTIONS_DELTA ROWS_PROCESSED_DELTA ------------------------------ -------------------------------------------------------------------------------- --------------- ------------- ---------------- -------------------- 2017_07_19 01:00 insert into test_redo select * from test_redo 1 g893rmm0rmjra 5 2685840 2017_07_19 01:00 insert into test_redo select * from test_redo where rownum<=10000 1 b7z56jkxs5jam 14 140000 2017_07_19 01:00 SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE NO_PARALLEL(SAMPLESUB 1 7q4g3xymr4yhz 3 3
3. 從ASH相關檢視找到執行這些SQL的session、module和machine。
select * from dba_hist_active_sess_history WHERE sql_id = 'g893rmm0rmjra';
select * from v$active_session_history where sql_Id = 'g893rmm0rmjra';
g893rmm0rmjra是SQL_ID,替換第二步查詢的結果SQL_ID列4. dba_soure 看看是否有儲存過程包含這個SQL。