oracle實驗記錄 (oracle 詳細分析redo(3))
與redo 的相關等待事件
SQL> show user
USER 為 "SYS"
SQL> select name from v$event_name where name like 'log%';
NAME
----------------------------------------------------------------
log file sequential read
log file single write
log file parallel write
log buffer space
log file switch (checkpoint incomplete)
log file switch (private strand flush incomplete)
log file switch (archiving needed)
log file switch completion
log file sync
log switch/archive
log file switch (clearing log file)
NAME
----------------------------------------------------------------
log write(odd)
log write(even)
已選擇13行。
具體 說明下 與redo有關常見的 event 產生原因,及其簡單處理方法:
log file sequential read:
當程式等待從REDO檔案中讀入塊時會產生該等待事件。
ARCH程式在讀取REDO檔案時會遭遇此等待事件。
引數說明:
事件號:174
事件名:log file sequential read
引數一:REDO日誌組中重做日誌檔案的相對序列號。
引數二:開始讀入的塊號
引數三:塊數
等待時間:完成請求讀取的IO所佔用的實際時間。
log file single write:
這是日誌檔案寫的 等待 (不是從log buffer 寫入log file)代表寫log file header時等待,一般是日誌檔案頭 更新member檔案或日誌sequence#增加時會寫日誌檔案頭
*log file parallel write:
這是一個主要事件 lgwr將log buffer寫出到logfile而產生的 等待時間
session commit or rollback,LGWR會等待該事件的完成,使用者會話則等待log file sync event
SQL> select event,p1,p1text,p2,p2text,p3,p3text from v$session where event='log
file parallel write';
未選定行
實驗環境 當前沒有這個event
查下歷史session
V$SESSION_WAIT_HISTORY
The V$SESSION_WAIT_HISTORY view displays the last ten wait events for each active session.
這個檢視會記錄 最近最後10次發生的 events
SQL> col event format a30
SQL> col p1text format a10
SQL> col p2text format a10
SQL> col p3text format a10
SQL> select event,p1,p1text,p2,p2text,p3,p3text from v$session_wait_history wher
e event='log file parallel write';
EVENT P1 P1TEXT P2 P2TEXT
------------------------------ ---------- ---------- ---------- ----------
P3 P3TEXT
---------- ----------
log file parallel write 1 files 3 blocks
1 requests
log file parallel write 1 files 2 blocks
1 requests
log file parallel write 1 files 2 blocks
1 requests
從p1text,p2text,p3text可以看出來
引數一:寫入的日誌檔案號
引數二:寫入的塊數
引數三:IO請求的號碼
9i前 要連線 v$event_name看才可以 ,沒有p1text
SQL> select parameter1 from v$event_name where name='log file parallel write';
PARAMETER1
----------------------------------------------------------------
files
SQL> select event,time_waited,average_wait from v$system_event where event='log
file parallel write';
EVENT TIME_WAITED AVERAGE_WAIT
------------------------------ ----------- ------------
log file parallel write 239 .25
AVERAGE_WAIT NUMBER Average amount of time waited for the event (in hundredths of a second) 單位是100分 之一秒
若AVERAGE_WAIT >10MS (單位毫秒 1000分之一秒 則表示I/o太慢 )
關於調整:
可以減少redo(nologging ,cats ,append操作)
可以加大log buffer,但相對的_log_io_size應該修改 控制1/3寫入 應該相對改小點,否則log buffer大了 1/3寫一次 寫的redo record太多
但如果redo allocation latch,redo writing latch 爭用(lgwr寫時候要 佔用這兩個latch)多不要減少_log_io_size這會造成 lgwr更加頻繁的寫 獲取這些latch 造成latch爭用
根本解決方法 還是將redo file放到更快的磁碟上
log buffer space
主要原因就是 server process生成redo record快過lgwr寫出redo record的 產生的 等待,新的redo record 從pga寫到log buffer中沒空間了,就是i/o過慢,另外log buffer過小也是
但如果log buffer過大 ,每次LGWR寫的 redo record過多,會造成使用者等待log file sync 事件,可以通過_log_io_size改進
調整建議方法 與log file parallel write event一樣
1* select name,value,class from v$sysstat s where statistic#=(select statistic
# from v$statname t where name='redo buffer allocation retries')
SQL> /
NAME VALUE
---------------------------------------------------------------- ----------
CLASS
----------
redo buffer allocation retries 0
2
SQL> col name format a40
SQL> /
NAME VALUE CLASS
---------------------------------------- ---------- ----------
redo buffer allocation retries 0 2
以上 查詢可以看到 session procss或 system級 必須等待 空間次數(等待lgwr flush log buffer)等待log buffer space次數.
redo buffer allocation retries :表示再次嘗試從log buffer中分空間的次數(最好為0),process第一次沒請求成功 會觸發LGWR 然後等待完成或其它PROCESS 已經觸發而 這個程式等待lgwr完成,完成後再次嘗試從log buffer中分配空間
用 redo buffer allocation retries和redo entries可以計算出從PGA copy change vector到SGA LOG BUFFER 時必須等待的重做記錄的數量所佔的比例
最好為0 或<1%如果>1%且不斷邊大 說明從PGA copy change vector到SGA LOG BUFFER時必須等待log buffer空的日誌塊,可以考慮加大log buffer or 提高lgwr寫效率
log file switch (checkpoint incomplete)
如果發生switch log file會產生一個 檢查點,將dirty block寫入disk ,記錄scn等,如果檢查點過慢 就會出現這個 等待事件
(手動switch 不會出現這個事件)
SQL> alter system switch logfile;
系統已更改。
SQL> select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 ACTIVE~~~~~~~~~~~檢查點 沒完成
2 ACTIVE~~~~~~~~~~~檢查點 沒完成
3 CURRENT
SQL> select event,p1,p1text,p2,p2text,p3,p3text from v$session where event='log
file switch (checkpoint incomplete)';
未選定行
log file switch (archiving needed):
如果是archive log mode 如果日誌切換過快,或arch程式 歸檔過慢 都會造成 這個等待事件,表示下一個日誌檔案還未歸檔,此時又發生switch
log file switch completion
當一個redo file 滿了後 需要切換(switch), 要開啟另一個online redo log file ,寫完上一個 檔案準備好下一個日誌檔案這之間的等待就是此事件
log file sync
使用者commit or rollback 提交了事務觸發lgwr寫入log file, 那麼使用者會等待這個事件,如果伴隨出現 log parallel write(也很高) 就是i/o過慢
如果log file sync很高 log parallel write很低 那麼證明i/o沒問題 log buffer很快的重新整理到log file中,那麼log file sync 表示使用者太多的commit or rollback
SQL> select name,value from v$sysstat where name in ('user commits','user rollba
cks');
NAME VALUE
---------------------------------------------------------------- ----------
user commits 687
user rollbacks 0
看看是否是過多了
log file switch (clearing log file):
alter system clear logfile時(clear會重建redo file member) 會出現且 lgwr正需要切換到被clear的redo file,,等待時間為1S
log switch/archive:手動執行歸檔時會發生
Used as part of the ALTER SYSTEM ARCHIVE LOG CHANGE scn statement. The session waits for the current log from all open threads to be archived.
Wait Time: Wait for up to 10 seconds
Parameter Description
thread# The thread number of the thread that is currently archiving its current log
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12020513/viewspace-617287/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle實驗記錄 (oracle 詳細分析redo(1))Oracle
- oracle實驗記錄 (oracle 詳細分析redo(2))Oracle
- oracle實驗記錄 (oracle 詳細分析redo(4))Oracle
- oracle實驗記錄 (oracle 詳細分析redo(5))Oracle
- oracle實驗記錄 (oracle 10G 詳細分析undo)Oracle
- oracle實驗記錄 (恢復-redo)Oracle
- oracle實驗記錄 (oracle 10G dataguard(4)redo傳輸&程式)Oracle
- oracle實驗記錄 (oracle 分析shared pool(1))Oracle
- oracle實驗記錄 (oracle 分析shared pool(2))Oracle
- oracle實驗記錄 (dump undo3)Oracle
- oracle實驗記錄 (精細策略dbms_rls)Oracle
- oracle實驗記錄(buffer_cache分析(3)cbc lru chain latch)OracleAI
- oracle實驗記錄 (buffer_cache分析(1))Oracle
- oracle實驗記錄 (oracle reset parameter)Oracle
- oracle實驗記錄 (手動 duplicate database(3))OracleDatabase
- oracle實驗記錄 (flashback)Oracle
- oracle實驗記錄 (OMF)Oracle
- oracle實驗記錄 (NET)Oracle
- oracle實驗記錄 (audit)Oracle
- oracle實驗記錄 (分析oracle硬解析&軟解析&fast soft parse)OracleAST
- oracle實驗記錄 (oracle 10G dataguard(3)檔案管理)Oracle
- oracle實驗記錄 (oracle 資料字典)Oracle
- Oracle Data Redaction實驗記錄Oracle
- oracle實驗記錄 (block cleanout)OracleBloC
- oracle實驗記錄 (dump undo)Oracle
- oracle實驗記錄 (inlist card)Oracle
- oracle實驗記錄 (分析oracle硬解析&軟解析&fast soft parse(2))OracleAST
- oracle實驗記錄 (buffer_cache分析(2)cbc latch)Oracle
- Oracle檔案改名實驗記錄Oracle
- oracle實驗記錄 (選擇率)Oracle
- oracle實驗記錄 (dump logfile)Oracle
- oracle實驗記錄 (事務控制)Oracle
- oracle實驗記錄 (函式index)Oracle函式Index
- oracle實驗記錄 (bigfile tablespace)Oracle
- oracle實驗記錄 (expdp/impdp使用)Oracle
- oracle實驗記錄 (transport tablespace(Rman))Oracle
- oracle實驗記錄 (使用exp/imp)Oracle
- oracle實驗記錄 (oracle consistent gets 計算)Oracle