【RAC】RAC 效能分析 - 'log file sync' 等待事件

xysoul_雲龍發表於2017-06-19
By: Jian Zhang


簡介

本文主要討論 RAC 資料庫中的'log file sync' 等待事件。RAC 資料庫中的'log file sync' 等待事件要比單機資料庫中的'log file sync' 等待事件複雜,主要原因是由於RAC 資料庫需要將SCN同步到所有例項。

首先,回顧一下單機資料庫中的'log file sync' 等待事件,當user session 提交(commit)時,user session會通知LGWR程式將redo buffer中的資訊寫入到redo log file,當LGWR程式完成寫操作後,LGWR再post(通知)user session 寫操作已經完成,user session 接收到LGWR的通知後提交操作才完成。因此user session 在沒有收到LGWR post(通知)之前一致處於等待狀態,具體的等待事件為'log file sync'。

在RAC資料庫中為了一致性讀,需要將Commit SCN同步/傳播到所有的節點上。SCN同步/傳播的主要方法有兩種:Lamport SCN 和 immediate commit propagation (BOC)。

10gR1 及以下版本預設使用Lamport SCN,Lamport SCN方式即一個節點上的commit SCN 不保證立刻同步/傳播到所有節點,也就是說可能延時同步/傳播,對於一些實時性要求高的RAC資料庫Lamport SCN方式是不可取的。如果希望commit SCN 立刻同步/傳播到所有節點,手動修改引數MAX_COMMIT_PROPAGATION_DELAY=1

從10gR2開始預設使用immediate commit propagation (BOC),BOC即一個節點上的commit SCN 立刻同步/傳播到所有節點。


介紹 immediate commit propagation (BOC)的工作原理 

1. user session 執行提交(commit),user session會通知LGWR程式將redo buffer中的資訊寫入到redo log file。
2. LGWR程式收到user session通知後,將redo buffer中的資訊寫入redo log file,同時LGWR 將COMMIT SCN 同步/傳播給遠端的資料庫例項的LMS 程式。
3. 遠端資料庫例項的LMS將commit SCN同步到本地SCN,然後通知commit例項的LMS,表示SCN 同步已經完成。
4. 當commit 例項的LMS接收到所有遠端資料庫例項的LMS的通知後,commit 例項的LMS再通知本地的LGWR 所有節點SCN同步已經完成。

5. LGWR 在完成了IO 操作和LMS程式通知後,LGWR通知user session commit 成功。user session在沒有收到LGWR通知前,一直處於等待log file sync。 


透過以上原理的說明,我們不難看出來導致'log file sync' 等待事件的主要原因有:
1. 磁碟IO 慢導致LGWR程式將redo buffer中的資訊寫入到redo log file速度慢。
2. user session commit過於頻繁。
3. 本地或者遠端伺服器CPU資源不足,導致LMS和/或者LGWR不能及時得到CPU排程,不能正常工作。
4. RAC私有網路效能差,導致LMS同步commit SCN慢。
5. ORACLE BUG.

分析處理'log file sync' 等待事件時的重要log/資訊

1. AWR 

例如:AWR中log file sync 的等待時間與log file parallel write的時間基本相同,因此是由於IO問題導致的log file sync.【RAC】RAC 效能分析 - 'log file sync' 等待事件


2. LGWR and LMS process trace file

例如:LGWR trace檔案中報出下面的資訊,很有可能是IO慢導致的。

Warning: log write time 1000ms, size 2KB 

3. OSWatcher <--- 可以幫助我們確認伺服器CPU資源使用情況

例如:下面的是OSW中vmstat 的輸出,其中runQ中的程式達到48個,表明當時CPU資源是非常緊張的,會導致LMS/LGWR不能獲得CPU 排程,導致Log file sync等待。

        procs           memory                   page                              faults       cpu

   r     b     w      avm    free   re   at    pi   po    fr   de    sr     in     sy    cs  us sy id

48    22     0  23877753  30244459    0    0     0    0     0    0     0  153454 2184632 114234  38 60  2

48    22     0  23877753  30244094    0    0     0    0     0    0     0  153694 2181493 114887  36 61  3

注:關於OSW的安裝配置請參考BLOG中的文章:

https://blogs.oracle.com/Database4CN/entry/%E5%88%A9%E5%99%A8osw_oswatcher_black_box_%E4%B9%8B%E7%AE%80%E4%BB%8B%E7%AF%87

4. Alert log 

5. Script to Collect Log File Sync Diagnostic Information (lfsdiag.sql) [Document 1064487.1] 


解決'log file sync' 等待事件主要方法
1. 提高磁碟IO速度
2. 採用批次提交,減少應用commit次數
3. 安裝OSWatcher 定位CPU使用率高的程式
4. 採用專用網路,正確設定網路UDP buffer引數
5. 安裝最新版本資料庫避免bug,具體bug修復的版本參考文件: 

WAITEVENT: "log file sync" Reference Note (Doc ID 34592.1) 




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-2140958/,如需轉載,請註明出處,否則將追究法律責任。

相關文章