等待事件:log file sync
- log file sync:該等待事件發生在redo log 從 log buffer寫入到log file期間
當用戶程序提交時,會通知LGWR將redo buffer寫入到redo file中,當LGWR程序完成寫入操作後,LGWR在通知使用者程序寫入完成;使用者程序接收到LGWR通知後才會完成提交。因此使用者程序在沒有收到LGWR通知之前一直處於等待狀態,就會產生log file sync。
它專指因提交或回滾而造成的寫快取到日誌檔案的等待.當發生此等待事件時,有時也會伴隨log file parallel write.因為此等待事件將會寫日誌快取。
如果日誌的I/O系統較為緩慢的話,這必將造成log file parallel write 等待.當發生log file sync等待後,判斷是否由於緩慢的日誌I/O造成的,可以檢視兩個等待事件的等待時間,如果比較接近,就證明日誌I/O比較緩慢或重做日誌過多,這時,造成log file sync的原因是因為log file parallel write,可以參考解決log file parallel write的方法解決問題。
如果log file sync的等待時間很高,而log file parallel write的等待時間並不高,這意味著log file sync的原因並不是緩慢的日誌I/O,而是應用程式過多的提交造成。
當log file sync的等待時間和 log file parallel write等待時間基本相同,說明是IO問題造成的log file sync等待事件。
- 發生日誌寫入的條件:
1、commit
2、每隔3秒鐘將日誌緩衝區輸出
3、當日志快取區已寫滿三分之一時
4、在DBWR將髒資料寫入到資料檔案之前
5、當log buffer 大於1M時
- 引起 log file sync的原因:
1、頻繁的提交或rollback,檢查應用是否有過多的短小的事物,如果有,可以使用批處理來緩解
2、過大的日誌緩衝區,因為log buffer中的資料量無法達到log_io_size,導致更多的重做條目堆積在日誌緩衝區,此時當事務提交或3s醒來時,LGWR會把所有資料都寫入到redo file中,由於數量過多,LGWR要用更多的時間等待redo寫完完畢(此種情況可以調小log_io_size引數,其預設值是log_buffer 的1/3或1M,去兩者中較小的值。)——可以具有很大的日誌緩衝區,但較小的log_io_size將增加後臺寫入次數,從而減少log file sync的等待時間。
3、CPU負載高,LGWR無法及時獲取CPU排程,出現 log file sync
4、log file sync 平均等待時間超過7ms,說明log write 每次寫入時間過長
- 解決方法:
1、檢視日誌提交是否頻繁,如果過於頻繁應儘量減少commit
2、確保CPU資源充足
3、調整日誌緩衝區不要過大
4、優化redo日誌檔案儲存,存放在更快的磁碟上(將日誌檔案放裸裝置上或繫結在RAID 0或RAID 0+1中,而不是繫結在RAID 5中。)