oracle enqueue(zt)
本文簡單描述了一下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引數構成,形如
通過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陣列,需要引入一個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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Enqueue WaitsOracleENQAI
- oracle enqueue typeOracleENQ
- ORACLE LARGE MEMORY(zt)Oracle
- oracle event 2 (zt)Oracle
- oracle job管理(zt)Oracle
- oracle time_zone(zt)Oracle
- AUTO START ORACLE ON LINUX(zt)OracleLinux
- ORACLE MTS的介紹(zt)Oracle
- Oracle's Parallel Execution Features(zt)OracleParallel
- How Oracle Store Number internal(zt)Oracle
- Oracle SQL optimization-2(zt)OracleSQL
- 【ASK_ORACLE】Row Cache Enqueue鎖之概念篇OracleENQ
- 修改Oracle資料庫字符集(zt)Oracle資料庫
- oracle9i下streams複製(zt)Oracle
- Oracle多粒度封鎖機制研究二(zt)Oracle
- What is the "WF - Contention'' Enqueue ?ENQ
- ORACLE9I升級到10G(zt)Oracle
- Oracle 叢集軟體資源的手工註冊(zt)Oracle
- 【ASK_ORACLE】資料泵由於”Streams AQ: Enqueue Blocked On Low Memory" 問題變慢OracleENQBloC
- INSTEAD OF(zt)
- lsof(zt)
- Oracle叢集檔案系統(OCFS2)使用者指南(zt)Oracle
- SQLSERVER SELECT(zt)SQLServer
- V$LOCK(zt)
- EXISTS、IN、NOT EXISTS、NOT IN(zt)
- Event Reference(zt)
- Fallacies Of The CBO(zt)
- 模擬mode=4 and name='TX'的enqueueENQ
- DBMS_TRACE(zt)
- Understanding System Statistics(zt)
- dbms_stats(zt)
- 切換UNDO(zt)
- ora_rowscn(zt)
- DBMS_PROFILER(zt)
- ORA-00604(zt)
- 物化檢視(zt)
- SQL Access Advisor(zt)SQL
- DBMS_SUPPORT(zt)