Oracle“日志檔案同步”等待事件在使用者會話發出送出(或復原)時觸發。使用者會話将發出 LGWR 信号或将其釋出到 LGWR,以将日志緩沖區寫入重做日志檔案。當 LGWR 完成寫入後,它将釋出使用者會話。等待完全取決于LGWR寫出必要的重做塊并将其完成的确認發送回使用者會話。等待時間包括日志緩沖區和 post 的寫入,有時稱為“送出延遲”。
<View:V$SESSION_WAIT> 中的 P1 參數定義如下:日志檔案同步等待事件:
P1 = buffer# 必須将直到此緩沖區編号(在日志緩沖區中)的所有更改重新整理到磁盤并确認寫入操作,以確定事務已送出并将在執行個體崩潰時保持。等待的是 LGWR 重新整理到此緩沖區 #。
減少甲骨文等待/等待時間
如果 SQL 語句遇到此事件的大量總時間,則應檢查平均等待時間。如果平均等待時間較短,但等待次數較多,則應用程式可能在每行之後送出,而不是批處理 COMMIT。Oracle 應用程式可以通過在“n”行之後送出來減少這種等待時間,進而減少不同的 COMMIT 操作。必須确認每個送出,以確定相關的 REDO 位于磁盤上。盡管 Oracle 可以“搭載”送出,但通過批處理事務來減少送出總數是非常有益的。
如果 SQL 語句是 SELECT 語句,請檢視 Oracle 稽核設定。如果為 SELECT 語句啟用了稽核,則 Oracle 可能會花費時間将資料寫入并送出到 AUDIT$ 表中。
如果平均等待時間很長,則檢查會話的其他與日志相關的等待時間,以檢視會話花費大部分時間的位置。如果會話繼續等待同一緩沖區#,則V$SESSION_WAIT的SEQ#列應該每秒遞增。如果不是,則本地會話存在等待事件逾時問題。如果 SEQ# 列遞增,則阻塞過程是 LGWR 程序。檢查LGWR正在等待什麼,因為它可能卡住了。
如果等待是由于 I/O 緩慢造成的,請嘗試以下操作:
- 減少包含重做日志的磁盤上的其他 I/O 活動,或使用專用磁盤。
- 嘗試減少資源争用。檢查每秒從 V$SYSSTAT 獲得的事務數(送出數 + 復原數)。
- 交替重做不同磁盤上的日志,以最大程度地減少存檔器對日志編寫器的影響。
- 将重做日志移動到更快的磁盤或更快的 I/O 子系統(例如,從 RAID 5 切換到 RAID 1)。
- 請考慮使用原始裝置(或磁盤供應商提供的模拟原始裝置)來加快寫入速度。
- 檢視是否可以使用NOLOGGING /不可恢複選項安全地完成任何活動,以減少正在寫入的重做量。
- 檢視是否有任何處理可以使用“送出NOWAIT”選項(在使用之前,請務必了解其語義)。
- 檢查日志緩沖區的大小,因為它可能非常大,以至于 LGWR 一次寫入了太多塊。
日志檔案同步等待事件:其他注意事項
如果Oracle“日志檔案同步”等待對整個系統很重要,則LGWR能夠足夠快地重新整理重做可能存在問題。“日志檔案同步”的總體等待時間可以分解為幾個組成部分。如果在完成上述正常調整提示後,系統仍然顯示較高的“日志檔案同步”等待時間,請将 Oracle 總等待時間分解為各個元件。然後,調整那些占用最多時間的元件。
“日志檔案同步”等待事件可能細分為以下元件:
1. 如果空閑
,則喚醒 LGWR 2.LGWR 收集要編寫的重做并發出 I/O
3。等待日志寫入 I/O 完成
的時間 4.LGWR 輸入/輸出後處理
5.LGWR 釋出前台/使用者會話,表示寫入已完成
6.前台/使用者會話喚醒
根據等待時間最長的“日志檔案同步”元件調整系統。步驟 2 和 3 累積在“重做寫入時間”統計資訊中。(即在統計包的統計部分下找到的)步驟 3 是“日志檔案并行寫入”等待事件。(請參閱元連結注釋 34583.1:“日志檔案并行寫入”)随着系統負載的增加,步驟 5 和 6 可能會變得非常重要。這是因為即使在釋出前台之後,作業系統也可能需要一些時間來安排它運作。
資料衛士注釋
如果使用具有同步傳輸和送出 WAIT 預設值的資料衛士,則上述優化步驟仍将适用。但是,步驟 3 還将包括網絡寫入時間和對備用重做日志的重做寫入。MAA OTN 白皮書 ( 注意 387174.1:MAA – 資料衛士重做傳輸和網絡最佳實踐) 中詳細介紹了“日志檔案同步”等待事件及其如何應用于資料衛士。
最後的思考
當使用者會話等待“日志檔案同步”事件時,它實際上是在等待 LGWR 程序将日志緩沖區寫入重做日志檔案并向其傳回确認/控制。如果總等待時間很長,請檢視平均等待時間。如果平均等待時間較短,但等待次數較多,請通過批處理(或在“n”之後送出)行來減少送出次數。
如果 I/O 速度較慢,請調查以下事項:
- 減少現有磁盤上的争用。
- 将日志檔案放在速度更快的磁盤上。
- 将備用重做日志放在不同的磁盤上,以最大程度地減少存檔過程(日志檔案切換)的影響。
- 檢視應用程式設計,在适當的情況下使用 NOLOGGING 操作,并避免更改超出要求的資料。
如果等待時間仍然很長,請檢視“日志檔案同步”的每個元件并單獨進行調整。
參考至:https://logicalread.com/oracle-log-file-sync-wait-event-dr01/