enqueue wait event .

itpremier發表於2010-09-11

Enqueue 3 個引數: 1. P1 表示 Lock type mode 比如, P1RAW 的值為 54580006 ,其中, 54 表示的是 T 58 表示的為 X 6 表示的專用鎖; 也可以用 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' 來查詢當前發生 enqueue 等待事件的 Lock mode ,該值對應著 V$lock 中的 lock type 2. P2 P3 代表 Enqueue name ID1 ID2 ,分別對應著 V$Lock 中的 ID1 ID2 大多數情況下, Enqueue 的等待時間為 3 v$Lock 中, request 0 表示的是 Holder >0 表示的是 waiter 確定 Enqueue 的效能: 1. 可以查詢 v$sysstat 來檢視 enqueue 等待 select * from v$sysstata where class = 4 2. 對於 9i ,可以查詢: SELECT eq_type "Lock", total_req# "Gets", total_wait# "Waits", cum_wait_time FROM V$enqueue_stat WHERE Total_wait# > 0 ; 3. 對於 8i ,可以查詢: SELECT ksqsttyp "Lock", ksqstget "Gets", ksqstwat "Waits" FROM X$KSQST where KSQSTWAT > 0; 根據這兩個 sql ,確定整個系統中的 enqueue 的等待情況 幾個普遍存在的 Lock mode TX :事務鎖 Note 62354.1 在以下情況下發生: 1) Another session is locking the requested row. 2) When two sessions tries to insert the same unique key into a table (none of them has done a COMMIT), then the last session is waiting for the first one to COMMIT or ROLLBACK. 3) There are no free ITL (Interested Transaction List) in the block header (increase INI_TRANS och PCT_FREE for the segment). TM DML enqueue 一般當外來鍵沒有建立索引的時候產生, Note 38373.1 Note 33453.1 ST space management enqueue ,當系統存在小碎片,或者存在大量的 sort 的時候產生 Note 33567.1 JQ Job queue UL user lock ,當使用者 DBMS_LOCK.REQUEST 時產生 SQ sequence enqueue, 檢查 sequence cache size 是否過小 SS sort segment enqueue, 檢查 temp 表空間太小,是否有查詢需要使用大量的 temporary 空間 HW enqueue 指和段的高水位標記相關等待;手動分配適當區可以避免這一等待 TX 是最常見的 enqueue 等待。 TX enqueue 等待通常是以下三個問題之一產生的結果: 第一個問題是唯一索引中的重複索引,你需要執行提交( commit / 回滾( rollback )操作來釋放 enqueue 第二個問題是對同一點陣圖索引段的多次更新。因為單個點陣圖段可能包含多個行地址( rowid ),所以當多個使用者試圖更新同一段時,可能一個使用者會鎖定其他使用者請求的記錄,這時等待出現。直到獲得鎖定的使用者提交或回滾, enqueue 釋放。 第三個問題,也是最可能發生的問題是多個使用者同時更新同一個塊。如果沒有足夠的 ITL 槽,就會發生塊級鎖定。透過增大 initrans / maxtrans 以允許使用多個 ITL 槽(對於頻繁併發進行 DML 操作的資料表,在建表之初就應該考慮為相應引數設定合理的數值,避免系統執行以後線上的更改,在 8i 之前, freelists 等引數不能線上更改,設計時的考慮就尤為重要),或者增大表上的 pctfree 值,就可以很容易的避免這種情況。 TM enqueue 佇列鎖在進行 DML 操作前獲得,以阻止對正在操作的資料表進行任何 DDL 操作 ( DML 操作一個資料表時,其結構不能被更改 select * from V$ENQUEUE_STAT; enqueue 型別 : BL, Buffer Cache Management CF, Controlfile Transaction CI, Cross-instance Call Invocation CU, Bind Enqueue DF, Datafile DL, Direct Loader Index Creation DM, Database Mount DR, Distributed Recovery DX, Distributed TX FS, File Set IN, Instance Number IR, Instance Recovery IS, Instance State IV, Library Cache Invalidation JQ, Job Queue KK, Redo Log “Kick” L[A-P], Library Cache Lock MR, Media Recovery N[A-Z], Library Cache Pin PF, Password File PI, Parallel Slaves PR, Process Startup PS, Parallel Slave Synchronization Q[A-Z], Row Cache RT, Redo Thread SC, System Commit Number SM, SMON SQ, Sequence Number Enqueue SR, Synchronized Replication SS, Sort Segment ST, Space Management Transaction SV, Sequence Number Value TA, Transaction Recovery TM, DML Enqueue TS, Temporary Segment (also TableSpace) TT, Temporary Table TX, Transaction UL, User-defined Locks UN, User Name US, Undo Segment, Serialization WL, Being Written Redo Log XA, Instance Attribute Lock XI, Instance Registration Lock

[@more@]

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

相關文章