天天看點

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都是同時出現的。