oracle enqueue(zt)

zhouwf0726發表於2019-03-31
http://space.itpub.net/?uid-193161-action-viewspace-itemid-50328

本文簡單描述了一下enqueue的基本概念,結構和一些相關的引數,希望對於加深enqueue的理解有點幫助。


什麼是enqueue

enqueue可以做名詞,也可以做動詞來解釋。做名詞時,指的的是一種鎖的型別,比如Tx enqueue。做動詞時,則是指將鎖請求放入到請求佇列的操作。

我們知道,lock是一種需要排隊的鎖實現機制,這和latch是不一樣的,latch是一種輕量級的鎖,是不需要排隊得。Enqueue就是lock的排隊機制的實現。

lock是用來實現對於共享資源的併發訪問的。如果兩個session請求的lock是相容的,則可以同時鎖定資源,如果兩個session請求的lock是不相容的,則其中一個session必須等待另外一個session釋放其持有的lock後,才能獲得對共享資源的鎖定。這時,等待的session的lock請求就需要進入到一個佇列當中,這就是enqueue等待。

Enqueue的模式

enqueue(lock)一共有六種模式:
1 NULL
2 SS
3 SX
4 S
5 SSX
6 X

什麼是enqueue resource

Lock有三種可能的狀態:已獲得,轉換或者等待。對於某一個lock,可能一些session已經獲得該lock,某些session請求轉換,也有某些session在請求持有但無法成功而導致等待。所以,對於一個lock,需要三個佇列來描述這些session的狀態。這個三個佇列,分別稱為Owner,waiter和convert佇列,由一個結構來管理,就是enqueue resource。

enqueue是有名字的,其名字就是對應的lock的型別加上ID1,ID2引數構成,形如ID2>。Enqueue resource的結構,其頭部是該enqueue的名字,然後就是指向三個佇列的指標。

通過v$resource檢視可以檢視當前系統中的enqueue。

由於系統中有很多型別的lock同時存在,那麼enqueue resource結構實際上是一個陣列,其長度由隱含引數_enqueue_resources控制,也就是說,該引數控制了系統中可同時存在的lock的數量。如果超過,則會報以下錯誤:
ORA-00052: "maximum number of enqueue resources exceeded"

通過v$resource_limit檢視可以檢視系統中各種資源的利用情況。

什麼是enqueue lock

enqueue lock就是lock本身。oracle使用了和enqueue reouserce分離的另外一個陣列來管理enqueue lock,這個陣列的長度由隱含引數_enqueue_locks控制。

通過檢視v$enqueue_lock可以檢視該陣列中的具體內容。

什麼是enqueue hash

通過上面關於enqueue resource的描述,我們可以知道,oracle查詢一個lock時,需要先在enqueue resource數上查詢到該lock的位置。

如果每次都在陣列上順序查詢,顯然效率較低。我們知道hash是一種高效的查詢演算法,所以oracle對於enqueue resource的查詢也採用了hash方式,引入了一個hash陣列,其大小由隱含引數_enqueue_hash控制。

通過對enqueue的名字進行hash計算,得到的結果就是某個enqueue resource在hash陣列中的位置,也就是定位到了具體的hash bucket。如果多個enqueue resource的hash值相同,則在同一個bucket中形成一個連結串列。

相應的,為了保護這個hash陣列,需要引入一個latch:enqueue hash chain。該latch有若干個子latch,由隱含引數_enqueue_hash_chain_latches控制

什麼是enqueue freelist

同樣的,對於enqueue resource陣列中的空閒位置,需要通過一個freelist列表來管理,這樣每次在請求新的位置時,不至於要掃描整個陣列。enqueue freelist由enqueues latch的保護

實際上,enqueue resource的Hash管理方式,和buffer cache/library cache的管理方式非常的相像。如果想更深入的瞭解enqueue hash,resource和lock,可以dump出具體的結果看看:

alter session set events ’immediate trace name enqueues level 3’;

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

相關文章