Enqueue events part one

foreverlee發表於2007-09-25

當處理enqueue等待時,熟記這些要點:

1 Enqueues 是應用到資料庫物件的locks.與latch(應用於SGA記憶體)不同.
2 Enqueues 是由應用程式發起,具有事務性.(具體參見下文)
3 Oracle session 正在等候獲取一個特定的enqueue. enqueue的名字和mode被記錄在P1引數裡.
針對不同型別的enqueue競爭應採用不同的方式解決.
4 一直到Oracle 9i,enqueue wait event 代表所有enqueue waits;從Oracle 10g開始enqueue waits被分類定義(下文詳細介紹).

[@more@]

What Is an Enqueue?
一個enqueue是什麼由具體環境決定. 如果它被看成是動詞,則表示將一個lock請求置於一個佇列的動作.如果被看成是名詞,它表示一個特定的lock,比如TX事務enqueue.

Enqueues 是一種非常精密的鎖定機制,用來管理訪問資料庫共享資源,比如(objects, background jobs, and redo threads).Oracle使用enqueues出於兩個目的: 第一,當enqueue為不相容模式(mode)時,enqueues防止併發sessions共享資料庫資源. 第二,當enqueue為相容模式時,enqueues容許併發sessions共享資料庫資源.

當session A請求一個資料庫物件上的鎖資源時,
如果被請求的鎖模式為不相容模式,且該資料庫物件已經被另一個session 以不相容模式鎖持有,則session A將它的鎖請求放置於一個佇列裡並且按順序等待被喚起.這個事件被稱為enqueue wait.

Enqueue waits 除了包括buffer locks (discussed in the “Buffer Busy Waits” section), library cache locks, row cache locks, and PCM (Parallel Cache Management) locks,也是對各種local locks的等待.


What Is an Enqueue Resource?
An enqueue resource是由於受到一個enqueue lock的資料庫資源.
Oracle透過內部陣列結構進行管理.
透過X$KSQRS (kernel service enqueue resource) or V$RESOURCE 檢視可以看到具體條目.
SQL> select * from v$resource;

ADDR TY ID1 ID2
-------- -- ---------- ----------
6D304434 XR 4 0
6D304594 CF 0 0
6D3046F4 RT 1 0
6D30474C RS 25 1
6D304904 MR 3 0
6D30495C MR 4 0
6D3049B4 MR 5 0
6D304B24 MR 1 0
6D304B7C MR 2 0
6D304BD4 MR 201 0
6D305634 TA 6 1

ADDR TY ID1 ID2
-------- -- ---------- ----------
6D305B5C PW 1 0
6D3069DC TS 3 1

已選擇13行。

SQL>
根據以上查詢輸出,我們可以看到enqueue resource structure 由lock type和兩個引數組成. Oracle用兩個字元符號例如(TX, TM, TS, MR, RT, etc)表示lock type. ID1,ID2兩個引數由於lock type的不同所以具有不同含義.
具體可以參見<>第六章 Enqueue部分 Table6-3.
在Oracle10g之前,ID1和ID2對於不同型別lock的含義並未公開.
在Oracle10g中可以透過如下查詢輕鬆得到.
col name for a20
col parameter2 for a20
col parameter3 for a20
select name,parameter2,parameter3 from v$event_name
/
稍後在本文enqueue資源爭用部分再對ID1與ID2作詳細介紹.

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

相關文章