enq:TX - index contention
TX-Transaction (index contention) : Lock held on an index during a split to prevent other operations on it—查詢v$enqueue_statistics
說明索引塊出現分裂,一個事務向一個資料塊插入資料,該資料塊正好發生分裂,則插入事務需要等待分裂事務(分裂事務是一個遞迴事務),通常高併發的OLTP系統。
如何分裂:
當一個事務修改索引塊上的資料,但沒有足夠的空間容納新的資料時,會將原有塊上部分資料放到一個新的資料塊上,此為索引塊分裂;
可分為:葉子節點塊分裂/枝節點分裂,以及 5-5分裂和9-1分裂
葉子節點分裂:葉子節點上沒有足夠的空間容納新插入的資料,或者沒有足夠的空間容納新的ITL slot,一個ITL slot為24B;
枝節點分裂:其下層的節點分裂,會導致在該節點上增加一條記錄指向新加的節點,當該節點空間不足時,會發生分裂;
根節點分裂:特殊的枝節點分裂,分裂需要兩個新的資料塊,將原有資料轉移至兩個新節點,原有節點上生成兩條記錄分別指向新增的資料塊
9-1分裂:事務向索引最後一個葉子節點資料塊上插入一條rowid大於或等於最大rowid的資料,且該資料塊上沒有其他未提交的事務,此時若沒有足夠的空間,則發生9-1分裂;
5-5分裂:1、新插入數值小於索引中最大值2、資料塊上沒有足夠的ITL Slot 3、新插入資料大於或等於索引中最大值,但是資料塊上還存在其他未提交的事務
9-1分裂通常為該表主要為插入操作,確保新的資料塊有最大的空閒空間;5-5分裂通常是表上併發事務多,且插入、刪除資料比較分散,需保證新老資料塊都有相當的空閒空間以容納新事務;
Pctfree在塊分裂時會被忽略
分裂事務控制
索引分裂由導致分裂的使用者事務中的遞迴事務控制的,對資源的請求和釋放都在該遞迴事務中完成;
枝節點上只有一個ITL slot,用於發生分裂時的遞迴事務;葉子節點上第一個ITL slot也是用於分裂使用;
資料塊分配
索引分裂時候,從freelist中找空閒塊;如果索引資料塊上資料全部被刪除,即會放在freelist前面,但不會從B數結構中刪除;
只要資料塊實際資料為0,不管有沒有提交,都會放到freelist上;如果此時發生分裂,該塊會被獲取,但是由於事務未提交,不會被分配,反覆如此會導致I/O增加;
Enq: TX-Index contention
當一個事務需要插入/刪除某個索引塊上的資料,而這個資料塊正在被另一個事務分裂時,則需要等待分裂完成才能修改資料
Enq: TX-allocate ITL entry
1、達到資料塊上最大事務數限制 2、遞迴事務ITL爭用,當一個事務中遞迴事務請求分裂一個索引塊時,此時正被另一個事務分裂
除了索引塊,對於表資料塊,造成該等待原因包括 initrans太少,沒有足夠的空間分配一個新的ITL slot (索引塊不會有類似問題,此情形下會發生索引塊分裂)
解決方法:需要減少索引分裂的次數
1、 減小索引大小 --選擇性強的列的放前面,減小枝節點大小;壓縮索引
2、 碎片較多的索引進行rebuild或者shrink space
3、 對於很少更新的表,使用大資料塊表空間
確認索引碎片
Analyze index index_name validate structure online;
select name,
del_lf_rows,
lf_rows,
round((del_lf_rows/(lf_rows+0.0000000001))*100) frag_pct
from index_stats
一般如果該索引的frag_pct>10%,那麼就需要rebuild index
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-697307/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- enq: TX - index contentionENQIndex
- enq: TX - index contention等待ENQIndex
- enq: TX - index contention基礎理論ENQIndex
- 故障排除 | enq:TX - index contention等待事件ENQIndex事件
- Troubleshooting 'enq: TX - index contention' WaitsENQIndexAI
- 如何解決enq: TX- index contentionENQIndex
- enq: TX - index contention故障修復一例ENQIndex
- 'enq: TX - index contention' Waits in a RAC Environment. [ID 873243.1]ENQIndexAI
- enq: TX - row lock contentionENQ
- 【MOS】Troubleshooting 'enq: TX - index contention' Waits (文件 ID 873243.1)ENQIndexAI
- zt_Oracle enq: TX contention 和 enq: TM contention 等待事件OracleENQ事件
- 關於enq: TX - index contention 等待的探討與測試ENQIndex
- 等待事件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: US - contentionENQ
- enq: HW - contentionENQ
- enq: TM - contentionENQ
- enq:TM contentionENQ
- enq: DX - contentionENQ
- enq: TS - contentionENQ
- 一次資料庫相關操作卡住的排查--enq: TX - row lock contention資料庫ENQ
- enq: TX - allocate ITL entryENQ
- 關於enq: US – contentionENQ
- enq: WF - contention等待事件ENQ事件
- enq: CF - contention 等待事件ENQ事件
- enq: TS - contention 等待事件ENQ事件
- 等待事件之enq: HW - contention事件ENQ