天天看點

log buffer space等待事件

最近,我們有台伺服器在delete操作期間發現一直在等待log buffer space,其他節點就沒與這個問題。經查,向重做緩沖區上寫入重做記錄的程序,為了確定擁有重做緩沖區内必要的空間,需要獲得redo allocation鎖存器。已獲得redo allocation鎖存器的狀态下,在想要得到重做緩沖區時,若沒有适當的剩餘空間,則需要等到直到獲得空間為止。這時,根據情況等待兩種事件。如果目前正在使用的重做日志檔案已滿,是以無法獲得剩餘空間,LGWR就會執行日志檔案切換,伺服器程序則等待log file switch completion事件。除此之外,需等待log buffer space事件。前者在日志檔案切換結束後,可能發生log buffer space等待瞬間增加的現象。這是因為欲在重做日志緩沖區上寫入的多數會話,等待日志檔案切換的結束,然後争前恐後的為了寫入到重做日志緩沖區上而發生争用。

重做緩沖區小于重做資料量時,發生log buffer space等待。是以廣泛發生log buffer space等待時,應該調整重做緩沖區是否過小,必要時應将重做緩沖區調整到足夠大。如果log buffer space等待和log file switch completion等待同時出現,就有必要懷疑重做緩沖區大小和重做日志檔案大小合理與否。許多情況下,這兩個等待是同時出現的。若重做日志檔案過小,則log file switch completion等待會增加,在日志檔案切換結束後,重新出現log buffer space等待現象。為減少log buffer space等待加大重做日志緩沖區大小時,log file sync等待可能會增加。

減少log buffer space等待的另一個方法是較少建立重做資料。适當使用Direct load功能、賦予nologging選項等,都屬于此方法。

log buffer space等待具有與free buffer waits等待相似的屬性。free buffer waits等待,是因為DBWR程序無法滿足伺服器程序尋找空閑緩沖區的速度而發生的。與此相同,log buffer space等待,是因為LGWR程序無法滿足伺服器程序的尋找空閑重做緩沖區的速度而發生的。減少free buffer waits等待的一種方法就是改善DBWR的性能。與此相同,減少log buffer space等待,也是改善LGWR的性能。将更快、更有效的I/O系統應用于重做日志檔案,可改善LGWR的寫入性能。

我們系統配置了足夠大的logfile,是以雖然一直在等待log buffer space,但是并沒有明顯的log file switch completion,是以解決方法是将log buffer從預設的30M調整為64M,如下:

ALTER SYSTEM SET LOG_BUFFER=67108864 SCOPE=BOTH;

重新開機資料庫,觀察後面确定是否緩解該問題。

花若盛開,蝶自飛來,你若精彩,幸福開懷!2020年12月11日-18日

繼續閱讀