V$LATCH

V$LATCH displays aggregate latch statistics for both parent and child latches, grouped by latch name. Individual parent and child latch statistics are broken down in the views V$LATCH_PARENT and V$LATCH_CHILDREN

該視圖裏存放着所有LATCH的統計信息,詳細查看具體LATCH也可以查看視圖V$LATCH_PARENT 和 V$LATCH_CHILDREN;

latches是用以保護SGA中的共享數據結構的一種低級機制,latches的執行由操作系統決定,尤其是確定一個進程是否要等待latch或要等待多長時間。  Latch是一種可被快速申請及釋放的鎖,latch最典型的應用是可以避免同一時間內超過一個進程執行同一段代碼。與之相關的是每個latch有一個清除的程序可以釋放死進程所佔用的latch,這樣可以避免死鎖。一旦一個進程申請了一個確定等級的latch,它不能再申請一個小於或等於該等級的latch(除非加上nowait選項) 

 什麼時候需要獲得latch呢?  進程在與SGA中的內存結構打交道時需要申請latch,同時在這段時間內需要保持對latch資源的佔有。在進程釋放SGA中的內存後,latch被釋放。每個latch保護 一段不同的內存數據結構,並由latch的名字所標識。ORACLE使用類似與“Test and Set”的原語進行Latches的操作,進程執行一段其他進程已獲得的代碼時將一直等待直到它所需要的latch被其他進程釋放。例如Redo allocation latches,copy latches,archive control latch等等。基本的觀點是需要阻塞對共享數據結構的並行訪問,由於set及free latches是原語,操作系統保證只有一個進程可以擁有對其的操作權。由於只有一個指令,它執行的非常快。Latches只能被短暫擁有,同時提供了清除異常中止的進程所擁有的latches的機制,這種清除操作由PMON後臺進程完成。


V$LATCH中的常用列:
NAME:latch名稱
IMMEDIATE_GETS:以Immediate模式latch請求數
IMMEDIATE_MISSES:請求失敗數
GETS:以Willing to wait請求模式latch的請求數
MISSES:初次嘗試請求不成功次數
SPIN_GETS:第一次嘗試失敗,但在以後的輪次中成功
SLEEP[x]:成功獲取前sleeping次數
WAIT_TIME:花費在等待latch的時間

latch有40餘種,但作爲DBA關心的主要應有以下幾種: 
Cache buffers chains latch:當用戶進程搜索SGA尋找database cache buffers時需要使用此latch。
Cache buffers LRU chain latch:當用戶進程要搜索buffer cache中包括所有 dirty blocks的LRU (least recently used) 鏈時使用該種latch。 
Redo log buffer latch:這種latch控制redo log buffer中每條redo entries的空間分配。 

Row cache objects latch:當用戶進程訪問緩存的數據字典數值時,將使用Row cache objects latch。



發佈了151 篇原創文章 · 獲贊 45 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章