SQL> select name,parameter1,parameter2,parameter3,wait_class from v$event_name where name in( 'log file sync','log file parallel write');
NAME PARAMETER1 PARAMETER2 PARAMETER3 WAIT_CLASS
--------------------------------------------- ---------- ---------- ---------- ----------------------------------------------------------------
log file parallel write files blocks requests System I/O
log file sync buffer# Commit
log file parallel write等待事件位于System I/O類,它有三個參數,第一個參數表示将要寫的檔案個數,第二個參數表示将要寫入的block個數,第三個參數表示I/O請求的個數。
log file sync 等待事件位于Commit類下,它隻有一個參數,它表示log file中block的塊号。
當使用者發出commit,rollback的時候,就會觸發lgwr程序将産生的redo record寫入到log file中,這個過程稱為日志同步寫入。
其餘條件的redo record 寫入到log file稱為背景寫入。
出現log file sync等待事件是很頻繁的,它很短,如果系統在awr報告,statspack報告中發現有log file sync
通常是由于過于頻繁的送出,日志檔案所在磁盤I/0緩慢,或者是log buffer太大引起的。
很多人不了解為什麼log buffer過大會造成log file sync等待事件,這是由于log buffer過大,會使lgwr懶惰,因為日志寫的觸發條件有一個是1/3的log buffer滿。當設定過大的log buffer,也會讓一次性寫入過大的redo record到log file中,寫得過多導緻log file sync等待。有一個隐含參數可以控制redo 寫的閥值:_log_io_size。
是以沒有必要将log buffer設定過大,隻要沒有出現log buffer space等待事件,log buffer大小就足夠,而且通常預設情況下log buffer是足夠的。
注意log file sync是使用者commit/rollback觸發的。
當一個session等待lgwr将log buffer的redo record 寫入到log file 就會産生log file parallel write等待事件
log file parallel write 是由lgwr程序引起的,不是user commit/rollback引起的,這點從oracle的分類我們就可以看出。
通常出現該等待事件是由于重做日志所在磁盤I/O緩慢,或者存在争用。
一般情況下log file parallel write和log file sync都是同時出現的。