log file sync, log file parallell write
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都是同時出現的。