成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何定位哪些SQL產(chǎn)生了大量的Redo日志

運維 數(shù)據(jù)庫運維
在ORACLE數(shù)據(jù)庫的管理、維護過程中,偶爾會遇到歸檔日志暴增的情況,也就是說一些SQL語句產(chǎn)生了大量的redo log,那么如何跟蹤、定位哪些SQL語句生成了大量的redo log日志呢?

[[373988]]

本文轉(zhuǎn)載自微信公眾號「DBA閑思雜想錄」,作者瀟湘隱者 。轉(zhuǎn)載本文請聯(lián)系DBA閑思雜想錄公眾號。   

 在ORACLE數(shù)據(jù)庫的管理、維護過程中,偶爾會遇到歸檔日志暴增的情況,也就是說一些SQL語句產(chǎn)生了大量的redo log,那么如何跟蹤、定位哪些SQL語句生成了大量的redo log日志呢?下面這篇文章結(jié)合實際案例和官方文檔“How to identify the causes of High Redo Generation (文檔 ID 2265722.1)”來驗證判斷一下。

首先,我們需要定位、判斷那個時間段的日志突然暴增了,注意,有些時間段生成了大量的redo log是正常業(yè)務行為,有可能每天這個時間段都有大量歸檔日志生成,例如,有大量作業(yè)在這個時間段集中運行。而要分析突然、異常的大量redo log生成情況,就必須有數(shù)據(jù)分析對比,找到redo log大量產(chǎn)生的時間段,縮小分析的范圍是第一步。合理的縮小范圍能夠方便快速準確定位問題SQL。下面SQL語句分別統(tǒng)計了redo log的切換次數(shù)的相關(guān)數(shù)據(jù)指標。這個可以間接判斷那個時間段產(chǎn)生了大量歸檔日志。

  1. /******統(tǒng)計每天redo log的切換次數(shù)匯總,以及與平均次數(shù)的對比*****/ 
  2. WITH T AS  
  3.     SELECT TO_CHAR(FIRST_TIME, 'YYYY-MM-DD')    AS LOG_GEN_DAY,  
  4.            TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME, 'YYYY-MM-DD'),  
  5.                        TO_CHAR(FIRST_TIME, 'YYYY-MM-DD'), 1, 0)) 
  6.                 , '999'AS "LOG_SWITCH_NUM"  
  7.     FROM   V$LOG_HISTORY  
  8.   WHERE FIRST_TIME < TRUNC(SYSDATE)  --排除當前這一天 
  9.     GROUP  BY TO_CHAR(FIRST_TIME, 'YYYY-MM-DD')  
  10. SELECT  T.LOG_GEN_DAY 
  11.       , T.LOG_SWITCH_NUM 
  12.       , M.AVG_LOG_SWITCH_NUM 
  13.       , (T.LOG_SWITCH_NUM-M.AVG_LOG_SWITCH_NUM) AS DIFF_SWITCH_NUM 
  14. FROM  T CROSS JOIN  
  15.     SELECT  TO_CHAR(AVG(T.LOG_SWITCH_NUM),'999'AS AVG_LOG_SWITCH_NUM 
  16.     FROM T 
  17. ) M 
  18. ORDER BY T.LOG_GEN_DAY DESC
  19.   
  20.  
  21.   
  22.  
  23. SELECT    TO_CHAR(FIRST_TIME,'YYYY-MM-DD'DAY
  24.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'00',1,0)),'999'"00"
  25.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'01',1,0)),'999'"01"
  26.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'02',1,0)),'999'"02"
  27.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'03',1,0)),'999'"03"
  28.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'04',1,0)),'999'"04"
  29.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'05',1,0)),'999'"05"
  30.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'06',1,0)),'999'"06"
  31.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'07',1,0)),'999'"07"
  32.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'08',1,0)),'999'"08"
  33.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'09',1,0)),'999'"09"
  34.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'10',1,0)),'999'"10"
  35.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'11',1,0)),'999'"11"
  36.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'12',1,0)),'999'"12"
  37.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'13',1,0)),'999'"13"
  38.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'14',1,0)),'999'"14"
  39.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'15',1,0)),'999'"15"
  40.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'16',1,0)),'999'"16"
  41.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'17',1,0)),'999'"17"
  42.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'18',1,0)),'999'"18"
  43.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'19',1,0)),'999'"19"
  44.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'20',1,0)),'999'"20"
  45.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'21',1,0)),'999'"21"
  46.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'22',1,0)),'999'"22"
  47.                 TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'23',1,0)),'999'"23" 
  48. FROM V$LOG_HISTORY 
  49. GROUP BY TO_CHAR(FIRST_TIME,'YYYY-MM-DD')  
  50. ORDER BY 1 DESC

如下案例所示,2018-03-26日有一個歸檔日志暴增的情況,我們可以橫向、縱向?qū)Ρ确治觯缓笈卸ㄔ?7點到18點這段時間出現(xiàn)異常,這個時間段與往常對比,生成了大量的redo log。

這里分享一個非常不錯的分析redo log 歷史信息的SQL

  1. ------------------------------------------------------------------------------------------------ 
  2. REM Author: Riyaj Shamsudeen @OraInternals, LLC 
  3. REM         www.orainternals.com 
  4. REM 
  5. REM Functionality: This script is to print redo size rates in a RAC claster 
  6. REM ************** 
  7. REM 
  8. REM Source  : AWR tables 
  9. REM 
  10. REM Exectution type: Execute from sqlplus or any other tool. 
  11. REM 
  12. REM Parameters: No parameters. Uses Last snapshot and the one prior snap 
  13. REM No implied or explicit warranty 
  14. REM 
  15. REM Please send me an email to rshamsud@orainternals.com, if you enhance this script :-) 
  16. REM  This is a open Source code and it is free to use and modify
  17. REM Version 1.20 
  18. REM 
  19. ------------------------------------------------------------------------------------------------ 
  20.   
  21. set colsep '|' 
  22. set lines 220 
  23. alter session set nls_date_format='YYYY-MM-DD HH24:MI'
  24. set pagesize 10000 
  25. with redo_data as ( 
  26. SELECT instance_number, 
  27.        to_date(to_char(redo_date,'DD-MON-YY-HH24:MI'), 'DD-MON-YY-HH24:MI') redo_dt, 
  28.        trunc(redo_size/(1024 * 1024),2) redo_size_mb 
  29.  FROM  ( 
  30.   SELECT dbid, instance_number, redo_date, redo_size , startup_time  FROM  ( 
  31.     SELECT  sysst.dbid,sysst.instance_number, begin_interval_time redo_date, startup_time, 
  32.   VALUE - 
  33.     lag (VALUE) OVER 
  34.     ( PARTITION BY  sysst.dbid, sysst.instance_number, startup_time 
  35.       ORDER BY begin_interval_time ,sysst.instance_number 
  36.      ) redo_size 
  37.   FROM sys.wrh$_sysstat sysst , DBA_HIST_SNAPSHOT snaps 
  38. WHERE sysst.stat_id = 
  39.        ( SELECT stat_id FROM sys.wrh$_stat_name WHERE  stat_name='redo size' ) 
  40.   AND snaps.snap_id = sysst.snap_id 
  41.   AND snaps.dbid =sysst.dbid 
  42.   AND sysst.instance_number  = snaps.instance_number 
  43.   AND snaps.begin_interval_time> sysdate-30 
  44.    ORDER BY snaps.snap_id ) 
  45.   ) 
  46. select  instance_number,  redo_dt, redo_size_mb, 
  47.     sum (redo_size_mb) over (partition by  trunc(redo_dt)) total_daily, 
  48.     trunc(sum (redo_size_mb) over (partition by  trunc(redo_dt))/24,2) hourly_rate 
  49.    from redo_Data 
  50. order by redo_dt, instance_number 

分析到這個階段,我們還只獲取了那個時間段歸檔日志異常(歸檔日志暴增),那么要如何定位到相關(guān)的SQL語句呢?我們可以用下面SQL來定位:在這個時間段,哪些對象有大量數(shù)據(jù)塊變化情況。如下所示,這兩個對象(當然,對象有可能是表或索引,這個案例中,這兩個對象其實是同一個表和其主鍵索引)有大量的數(shù)據(jù)塊修改情況。基本上我們可以判斷是涉及這個對象的DML語句生成了大量的redo log, 當然有可能有些場景會比較復雜,不是那么容易定位。

  1. SELECT TO_CHAR(BEGIN_INTERVAL_TIME, 'YYYY-MM-DD HH24') SNAP_TIME,  
  2.        DHSO.OBJECT_NAME,  
  3.        SUM(DB_BLOCK_CHANGES_DELTA)                     BLOCK_CHANGED  
  4. FROM   DBA_HIST_SEG_STAT DHSS,  
  5.        DBA_HIST_SEG_STAT_OBJ DHSO,  
  6.        DBA_HIST_SNAPSHOT DHS  
  7. WHERE  DHS.SNAP_ID = DHSS.SNAP_ID  
  8.        AND DHS.INSTANCE_NUMBER = DHSS.INSTANCE_NUMBER  
  9.        AND DHSS.OBJ# = DHSO.OBJ#  
  10.        AND DHSS.DATAOBJ# = DHSO.DATAOBJ#  
  11.        AND BEGIN_INTERVAL_TIME BETWEEN TO_DATE('2018-03-26 17:00',  
  12.                                        'YYYY-MM-DD HH24:MI')  
  13.                                        AND  
  14.            TO_DATE('2018-03-26 18:00''YYYY-MM-DD HH24:MI')  
  15. GROUP  BY TO_CHAR(BEGIN_INTERVAL_TIME, 'YYYY-MM-DD HH24'),  
  16.           DHSO.OBJECT_NAME  
  17. HAVING SUM(DB_BLOCK_CHANGES_DELTA) > 0  
  18. ORDER  BY SUM(DB_BLOCK_CHANGES_DELTA) DESC

此時,我們可以生成這個時間段的AWR報告,那些產(chǎn)生大量redo log的SQL一般是來自TOP Gets、TOP Execution中某個DML SQL語句或一些DML SQL語句,結(jié)合上面SQL定位到的對象和下面相關(guān)SQL語句,基本上就可以判斷就是下面這兩個SQL產(chǎn)生了大量的redo log。(第一個SQL是調(diào)用包,包里面有對這個表做大量的DELETE、INSERT操作)

如果你此時還不能完全斷定,也可以使用下面SQL來輔佐判斷那些SQL生成了大量的redo log。在這個案例中, 上面AWR報告中發(fā)現(xiàn)的SQL語句和下面SQL捕獲的SQL基本一致。那么可以進一步佐證。

注意,該SQL語句執(zhí)行較慢,執(zhí)行時需要修改相關(guān)條件:時間和具體段對象。

  1. SELECT TO_CHAR(BEGIN_INTERVAL_TIME,'YYYY_MM_DD HH24'WHEN
  2.        DBMS_LOB.SUBSTR(SQL_TEXT,4000,1) SQL, 
  3.        DHSS.INSTANCE_NUMBER INST_ID, 
  4.        DHSS.SQL_ID, 
  5.        EXECUTIONS_DELTA EXEC_DELTA, 
  6.        ROWS_PROCESSED_DELTA ROWS_PROC_DELTA 
  7. FROM DBA_HIST_SQLSTAT DHSS, 
  8.      DBA_HIST_SNAPSHOT DHS, 
  9.      DBA_HIST_SQLTEXT DHST 
  10. WHERE UPPER(DHST.SQL_TEXT) LIKE '%<segment_name>%'  --此處用具體的段對象替換 
  11.   AND LTRIM(UPPER(DHST.SQL_TEXT)) NOT LIKE 'SELECT%' 
  12.   AND DHSS.SNAP_ID=DHS.SNAP_ID 
  13.   AND DHSS.INSTANCE_NUMBER=DHS.INSTANCE_NUMBER 
  14.   AND DHSS.SQL_ID=DHST.SQL_ID 
  15.   AND BEGIN_INTERVAL_TIME BETWEEN TO_DATE('2018-03-26 17:00','YYYY-MM-DD HH24:MI'
  16.   AND TO_DATE('2018-03-26 18:00','YYYY-MM-DD HH24:MI'

其實上面分析已經(jīng)基本完全定位到SQL語句,剩下的就是和開發(fā)人員或Support人員溝通、了解是正常業(yè)務邏輯變更還是異常行為。如果需要進一步挖掘深入,我們可以使用日志挖掘工具Log Miner深入分析。在此不做展開分析。其實個人在判斷分析時生成了正常時段和出現(xiàn)問題時段的AWR對比報告(WORKLOAD REPOSITORY COMPARE PERIOD REPORT),如下所示,其中一些信息也可以供分析、對比參考。可以為復雜場景做對比分析(因為復雜場景,僅僅通過最上面的AWR報告可能無法準確定位SQL)

此次截圖,沒有截取相關(guān)SQL,其實就是最上面分析的SQL語句,如果復雜場景下,非常有用。

參考資料:

How to identify the causes of High Redo Generation (文檔 ID 2265722.1)

 

責任編輯:武曉燕 來源: DBA閑思雜想錄
相關(guān)推薦

2022-06-13 11:33:59

RedoMySQL

2015-07-13 13:12:51

閃存數(shù)據(jù)中心

2022-07-03 16:42:10

后端Web開發(fā)

2015-08-21 09:55:09

APP工程師泡沫

2010-07-08 13:13:14

清除SQL Serve

2019-07-28 18:30:52

MySQL日志數(shù)據(jù)庫

2022-08-15 09:00:23

數(shù)據(jù)庫日志

2011-04-28 10:09:11

傳真

2019-09-27 16:33:50

人工智能AI教育

2019-08-21 14:27:33

大數(shù)據(jù)網(wǎng)絡(luò)安全

2011-06-28 08:32:40

MySQL慢查詢?nèi)罩?/a>

2023-11-29 16:15:48

CIOCISO

2019-03-13 14:51:13

云計算AI云平臺

2017-12-28 15:40:16

開源LinuxGitHub

2022-05-11 07:41:55

死鎖運算線程

2010-07-15 13:22:28

2018-09-20 11:54:31

數(shù)據(jù)庫MySQL性能優(yōu)化

2018-01-26 07:44:04

數(shù)據(jù)中心機房霧霾

2023-02-20 11:02:59

數(shù)字化轉(zhuǎn)型企業(yè)

2021-09-30 14:23:23

服務器開發(fā)工具
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 中文字幕亚洲无线 | 我要看免费一级毛片 | 99久久久久国产精品免费 | 亚洲一区二区日韩 | 水蜜桃亚洲一二三四在线 | 久久久久久综合 | 国产精品久久久久一区二区三区 | 日韩中文一区二区三区 | 91精品观看 | 久久久久成人精品亚洲国产 | 欧美成人一级 | 久久久久久www | 国产高清精品一区二区三区 | 久久久人成影片一区二区三区 | 国产一级免费视频 | 欧美九九 | 欧产日产国产精品99 | 欧美综合久久 | 桃色五月| 国产成人精品一区二区 | 日本欧美国产在线观看 | 久久网亚洲 | 找个黄色片 | 国产成人精品一区二区 | 国产精品久久九九 | 欧美 中文字幕 | 中文天堂网 | 99国产精品99久久久久久 | av网站免费 | 伊人色综合久久天天五月婷 | 网址黄 | 国产精品无码久久久久 | 久草色播 | 国产精品视频一区二区三区 | 日韩伦理电影免费在线观看 | 国产精品久久久久久久久久免费 | 99国产精品视频免费观看一公开 | 国产精品一区二区在线 | 国产三级 | 亚洲免费成人av | 99精品一区二区 |