【ASK_ORACLE】Row Cache Enqueue鎖之概念篇

Attack_on_Jager發表於2023-05-17

一、何為 Row Cache Enqueue 鎖?

行快取(Row Cache)或資料字典快取(Data Dictionary Cache)是儲存資料字典資訊的共享池的記憶體區域。 row cache 儲存資料時並不是以資料塊的形式,而是以行的形式。row cache enqueue 鎖是在資料字典行的鎖。此 enqueue 是關於特定資料字典物件的。這就是所謂的 enqueue 型別,可以在檢視 V$rowcache 中找到。

官方給出的獲取該鎖資訊的指令碼:

set pages 1000
column cache# format 99999
column name format a33
column latch# format 999999
select distinct s.kqrstcln latch#,r.cache#,r.parameter name,r.type,r.subordinate#
from v$rowcache r,x$kqrst s
where r.cache#=s.kqrstcid
order by 1,4,5;


二、"WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" 警告資訊是什麼意思?

當試圖去獲得 row cache 鎖時,這種等待事件將被使用。
當 row cache 衝突發生時,如果不能在一個預定的時間週期內得到 enqueue,將在user_dump_dest 或 background_dump_dest 目錄下生成一個跟蹤檔案( 這兩個目錄的選擇取決於是使用者還是後臺程式建立的跟蹤檔案。alert.log 通常會相應的更新警告訊息和跟蹤檔案的位置)。
資料庫檢測到核心資源被持有太久並通知DBA,從而讓這種情況可以得到解決。這也可能使資料庫掛起或變慢alert.log 的訊息和生成的跟蹤檔案包含以下資訊:

> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! <<<


如果不能立即獲取 rowcache entry 鎖,那麼進入一個迴圈,先釋放 row cache 物件閂鎖,等待上述等待事件,重新獲得閂鎖,然後再次嘗試獲取 rowcache 鎖。在單例項模式,會重複 1000次直到程式報錯“WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK”。在 RAC 環境會一直重複,直到不能獲得例項鎖或者被中斷

Systemstate dump 可以提供一些有用的資訊診斷爭用的原因。

注:

The "WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" 當達到閾值會引發這個訊息,因此, 如果未達到閾值它不會被引發。由此可知,對於不太嚴重的問題,即使具有相同的原因,也可以不輸出該訊息。


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

相關文章