【等待事件】等待事件系列(5.1)--Enqueue(隊列等待) 1 BLOG文檔結構圖 2 前言部分 2.1 導讀和註意事項 各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~: ① Enqueue隊列等待 ② Enq數據字典 ③ enq: A... ...
【等待事件】等待事件系列(5.1)--Enqueue(隊列等待)
1 BLOG文檔結構圖
2 前言部分
2.1 導讀和註意事項
各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~:
① Enqueue隊列等待
② Enq數據字典
③ enq: AE - lock
④ enq: MR鎖
⑤ enq: DX - contention
⑥ enq: SQ - contention 序列等待
2.2 相關參考文章鏈接
http://blog.itpub.net/26736162/viewspace-2124435/ | ||
http://blog.itpub.net/26736162/viewspace-2124417/ | ||
2016-09-23 | 【等待事件】日誌類 等待事件(4.7)--LGWR wait for redo copy、switch logfile 等 | |
2016-09-22 | ||
2016-09-21 | ||
2016-09-20 | ||
2016-09-19 | ||
2016-09-18 | ||
2016-09-17 | ||
2016-09-07 | ||
2016-09-06 | ||
2016-09-04 | ||
2016-09-03 | ||
2016-09-01 | ||
2016-08-31 | ||
2016-08-30 | ||
2016-08-29 | ||
2016-08-27 | ||
2016-08-26 | ||
2016-08-20 | ||
2016-08-16 | ||
2016-08-15 | ||
2016-08-14 | ||
2016-08-13 |
3 Enqueue(隊列等待)
3.1 簡介
Enqueue是一種保護共用資源的鎖定機制,是協調訪問資料庫資源的內部鎖。該鎖定機制保護共用資源,以避免因併發操作而損壞數據,比如通過鎖定保護一行記錄,避免多個用戶同時更新。Enqueue採用排隊機制,即FIFO(先進先出)來控制資源的使用。
Enqueue是一組鎖定事件的集合,如果資料庫中這個等待事件比較顯著,還需要進一步追蹤是哪一個類別的鎖定引發了資料庫等待。
Enqueue這個詞其實是LOCK的另一種描述語。當我們在AWR報告中發現長時間的Enqueue等待事件時,說明資料庫中出現了阻塞和等待,可以關聯AWR報告中的Enqueue Activity部分來確定是哪一種鎖定出現了長時間等待。
所有以“enq:”打頭的等待事件都表示這個會話正在等待另一個會話持有的內部鎖釋放,它的名稱格式是enq:enqueue_type - related_details。資料庫動態性能視圖v$event_name提供所有以“enq:”開頭的等待事件的列表。
SELECT * FROM V$EVENT_NAME WHERE NAME LIKE 'enq%';
SELECT D.PARAMETER1, COUNT(1)
FROM V$EVENT_NAME D
WHERE NAME LIKE 'enq%'
GROUP BY D.PARAMETER1;
可以看出11.2.0.4中大約有512種Enqueue等待事件。
這一類的等待事件P1參數一般有“name|mode”和“type|mode”2種形式,其中:
Name: enqueue 的名稱和類型。
Mode: enqueue的模式。
可以使用如下SQL查看當前會話等待的enqueue名稱和類型(當然,這裡的視圖不僅僅可以是v$session_wait,只要包含p1的值即可,比如v$session、DBA_HIST_ACTIVE_SESS_HISTORY等視圖):
SELECT CHR (TO_CHAR (BITAND (P1, -16777216)) / 16777215)
|| CHR (TO_CHAR (BITAND (P1, 16711680)) / 65535)
"LOCK",
TO_CHAR (BITAND (P1, 65535)) "MODE"
FROM V$SESSION_WAIT
WHERE EVENT = 'ENQUEUE'