enq: TX - row lock contention
# 如果當前正在發生,可以透過下面語句查詢阻塞者: col p2 for 9999999999 col p3 for 9999999999 col blk_sid for 99999 col lv for 99 set lines 160 set pagesize 100 select sid,blocking_session final_sid,sql_id,prev_sql_id,event,level lv,p2,p3,sys_connect_by_path(sid,',') sid_chain from v$session start with event = 'enq: TX - row lock contention' connect by sid = prior blocking_session order by level; # 如果過去發生,可以透過AWR、ASH定位相關表、索引發生的row lock contention # 可以根據enq: TX - row lock contention的p1或者根據p2 p3關聯v$lock id1 id2來查詢鎖模式: select chr(bitand(&p1, -16777216) / 16777215) || chr(bitand(&p1, 16711680) / 65535) "Name", (bitand(&p1, 65535)) "Mode" from dual; # 根據lock mode來獲取是否是真正的行鎖,還是由於索引,主鍵唯一鍵衝突導致。
所有以 “ enq: ”打頭的等待事件都表示這個會話正在等待另一個會話持有的內部鎖釋放,它的名稱格式是 enq:enqueue_type - related_details 。這裡的 enqueue_type 是 TX , related_details 是 row lock contention 。資料庫動態效能檢視 v$event_name 提供所有以“ enq: ”開頭的等待事件的列表。
Oracle 的 enqueue 包含以下模式:
模式程式碼 |
解釋 |
1 |
Null mode |
2 |
Sub-Share |
3 |
Sub-Exclusive |
4 |
Share |
5 |
Share/Sub-Exclusive |
6 |
Exclusive |
enq: TX - row lock contention 通常是 Application 級別的問題。通常情況下, Oracle 資料庫的等待事件 enq: TX - row lock contention 會在下列三種情況下會出現。
(一) 第一種情況,是 真正的業務邏輯上的行鎖衝突 ,如一條記錄被多個人同時修改。這種鎖對應的請求模式是6( Waits for TX in mode 6 : A 會話持有 row level lock , B 會話等待這個 lock 釋放。)。 不同的 session 更新或刪除同一個記錄。( This occurs when one application is updating or deleting a row that another session is also trying to update or delete. )
解決辦法:持有鎖的會話 commit 或者 rollback 。
(二) 第二種情況,是 唯一鍵衝突(In mode 4,唯一索引) ,如主鍵欄位相同的多條記錄同時插入。這種鎖對應的請求模式是4。這也是應用邏輯問題。表上存在唯一索引, A 會話插入一個值(未提交), B 會話隨後也插入同樣的值 ;A 會話提交後, enq: TX - row lock contention 消失。
解決辦法:持有鎖的會話 commit 或者 rollback 。
(三) 第三種情況,是 bitmap索引的更新衝突( in mode 4 :bitmap ) ,就是多個會話同時更新bitmap索引的同一個資料塊。源於 bitmap 的特性:點陣圖索引的一個鍵值,會指向多行記錄,所以更新一行就會把該鍵值指向的所有行鎖定。此時會話請求鎖的對應的請求模式是 4
解決辦法:持有鎖的會話 commit 或者 rollback 。
(四) 其他 原因
It could be a primary key problem; a trigger firing attempting to insert, delete, or update a row; a problem with initrans; waiting for an index split to complete; problems with bitmap indexes;updating a row already updated by another session; or something else.
( )
擷取自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31439444/viewspace-2695123/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 等待事件enq: TX - row lock contention事件ENQ
- 【等待事件】-enq: TX - row lock contention事件ENQ
- 奇異的enq: TX - row lock contentionENQ
- 等待事件enq TX row lock contention分析事件ENQ
- enq: TX - row lock contention等待事件處理ENQ事件
- AWR實戰分析之----enq: TX - row lock contentionENQ
- Oracle Enqueues Wait Events 三 enq: TX - row lock contentionOracleENQAI
- enq: TX – row lock contention的測試和案例分析ENQ
- 無關的表引起的enq: TX - row lock contentionENQ
- 關於enq: TX - row lock contention行鎖的總結ENQ
- 20161208理解enq TX - row lock contentionENQ
- ORACLE 歸檔空間滿導致的enq: TX - row lock contentionOracleENQ
- 使用oradebug dump processstate 來診斷enq: TX - row lock contentionENQ
- 一次資料庫相關操作卡住的排查--enq: TX - row lock contention資料庫ENQ
- enq:TX - index contentionENQIndex
- enq: TX - index contentionENQIndex
- enq: TX - index contention等待ENQIndex
- zt_Oracle enq: TX contention 和 enq: TM contention 等待事件OracleENQ事件
- enq: TX - index contention基礎理論ENQIndex
- 故障排除 | enq:TX - index contention等待事件ENQIndex事件
- Troubleshooting 'enq: TX - index contention' WaitsENQIndexAI
- 如何解決enq: TX- index contentionENQIndex
- row lock contention 阻塞程式查詢
- enq: TX - index contention故障修復一例ENQIndex
- enq:SQ-contention / DFS lock handle(SV)ENQ
- 'enq: TX - index contention' Waits in a RAC Environment. [ID 873243.1]ENQIndexAI
- 【MOS】Troubleshooting 'enq: TX - index contention' Waits (文件 ID 873243.1)ENQIndexAI
- 關於enq: TX - index contention 等待的探討與測試ENQIndex
- enq: US - contentionENQ
- enq: HW - contentionENQ
- enq: TM - contentionENQ
- enq:TM contentionENQ
- enq: DX - contentionENQ
- enq: TS - contentionENQ
- enq: TX - allocate ITL entryENQ
- 關於enq: US – contentionENQ
- enq: WF - contention等待事件ENQ事件
- enq: CF - contention 等待事件ENQ事件