cache buffer lru chain latch等待事件

n-lauren發表於2013-02-27

cache buffer lru chain latch官方解釋

The cache buffer lru chain latch is acquired in order to introduce a new block into the buffer cache
and when writing a buffer back to disk, specifically when trying to scan the LRU (least recently used) chain
containing all the dirty blocks in the buffer cache.

cache buffer lru chain latch可能原因

想檢視或者修改LRU+LRUW的程式,始終要持有cache buffers lru chain latch。
若在此過程中發生爭用,則要等待latch:cache buffers lru chain 事件。
總結出來如下兩種情況會導致cache buffers lru chain latch:
1.程式欲讀取還沒有裝載到記憶體上的塊時,通過查詢LRU 列分配到所需空閒緩衝區,在此過程中需要cache buffers lru chain latch。
2.DBWR 為了將髒緩衝區記錄到檔案上,查詢LRUW 列,將相應緩衝區移動到LRU 列的過程中也要獲得cache buffers lru chain latch。
2.1)DBWR在如下情況下將髒緩衝區記錄到檔案裡。
2.2)Oracle 程式為了獲得空閒緩衝區,向DBWR 請求記錄髒緩衝區時;
2.3)Oracle程式為執行Parallel Query 或Tablespace Backup,Truncate/Drop 等工作,請求記錄相關物件的髒緩衝區時;
2.4)週期性或管理上的原因檢查點(checkpointing)被執行時。
2.5)Oracle 為了保障將通過FAST_START_MTTR_TARGET(或LOG_CHECKPOINT_TIMEOUT)指定的時間的恢復,週期性執行檢查點。
2.6)管理員執行檢查點命令或根據日誌檔案切換,也會發生檢查點。

cache buffers lru chain latch爭用的最重要的原因是過多請求空閒緩衝區。低效的SQL語句是過多請求空閒緩衝區的最典型情況,若多個會話同時執行低效的SQL語句,則在查詢空閒緩衝區過程中和記錄髒緩衝區的過程中,為了獲取buffers lru chain latch發生爭用。多個會話同時掃描不同表或索引時,發生cache buffers lru chain latch爭用的概率高。多個會話將各不相同的塊載入到記憶體過程中,確保空閒緩衝區的請求會增多,因此發生對工作組爭用的概率將提高。特別是因為資料修改頻繁,以至於髒緩衝區數量多,正因此DBWR 因為檢查點而查詢LRUW 列的次數頻繁,所以cache buffers lru chain latch爭用將更加嚴重。cache buffers lru chain latch爭用的另一個重要特點就是伴隨著物理I/O。若是低效的索引掃描引起的問題,則同時發生db file sequential read 等待和lru chain latch爭用;若是不必要的全表掃描引起的問題,則同時發生db file scattered read 等待和lru chain latch爭用。事實上,cache buffers chains latch爭用和cache buffers lru chain latch爭用同時發生的情況較多,因為複雜的應用程式將複合地應用上述模式。data buffer過小或檢查點週期過短時,也會增加cache buffers lru chain latch爭用;但是現在的資料庫的data buffer都不會太小,而檢查點週期一般使用預設值,所以通常定位cache buffers lru chain latch的原因還是在低效的SQL語句上

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

相關文章