Oracle中的redo copy latch

oracle_ace發表於2007-12-19

     首先我們需要清楚一點,log buffer中的內容是通過server process將PGA中的redo資訊copy過去的。那麼在copy之前,server process是需要得到一個redo copy latch,這個latch表明server process正在將redo寫入到log buffer中,在此過程中,LGWR出於某種原因在要將log buffer內容寫入log file之前,應該先等待server process將redo資訊copy到log buffer後並釋放了redo copy latch後進行,也就是說LGWR在寫出之前,需要訪問Latch Recovery Area檢查redo copy latch,以確認目標redo並未處於寫入狀態。此過程LGWR僅需要檢查redo copy latch,不需要持有。

    其次需要清楚的是,serve process在獲得redo copy latch後,還不能繼續工作,這個時候他還需要獲得一個latch,就是redo allocation latch,這個latch用來在log buffer中分配redo空間以備儲存我們的redo資訊,空間分配完成後呢,就可以釋放redo allocation latch,然後server process就可以將PGA中的redo資訊寫入我們的log buffer,然後再釋放redo copy latch

    有一個隱藏的初始化引數_log_simultaneous_copies,表明允許同時獲得redo copy latch的數量。
在Oracle 8.1.3開始呢,這個引數預設是2倍cpu的數量。而且是一個隱含引數。

    同時我們也可以,通過以下語句來查詢redo copy latch
col name for a22
select addr,latch#,child#,name,gets,immediate_gets,immediate_misses
from v$latch_children where name='redo copy';

    在某種情況下會觸發LGWR寫日誌,那麼首先都是在完成redo copy以後,程式才通知LGWR執行寫出,在寫出前首先還是需要獲得redo writing latch去檢查LGWR是否已經被啟用或者是已經被使用,如果是這樣的話,redo writing latch就被釋放了。

在redo copy過程中,程式在以log file sync時間處與等待。

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

相關文章