enq: TX - allocate ITL entry
SQL> l
1* select name, parameter1, parameter2, parameter3 from v$event_name where name like '&event'
SQL> /
Enter value for event: enq: TX - allocate ITL entry
old 1: select name, parameter1, parameter2, parameter3 from v$event_name where name like '&event'
new 1: select name, parameter1, parameter2, parameter3 from v$event_name where name like 'enq: TX - allocate ITL entry'
NAME PARAMETER1 PARAMETER2 PARAMETER3
------------------------------ --------------- --------------- ---------------
enq: TX - allocate ITL entry name|mode usn<<16 | slot sequence
SQL>
原因;
By default the INITRANS value for a table is one, and for an index is two. This defines an internal block structure called the Interested Transaction List (ITL). In order to modify data in a block, a process needs to use an empty ITL slot to record that the transaction is interested in modifying some of the data in the block. If there are insufficient free ITL slots then new ones will be taken in the free space reserved in the block. If this runs out and too many concurrent DML transactions are competing for the same data block we observe contention against the following wait event - "enq: TX - allocate ITL entry".
預設情況下,表的INITRANS值是1,索引是2。 這定義了一個名為Interested Transaction List(ITL)的內部塊結構。 為了修改塊中的資料,程式需要使用一個空的ITL槽來記錄事務有興趣修改塊中的一些資料。 如果沒有足夠的免費ITL插槽,那麼將在該塊中保留的空閒空間中使用新插槽。 如果這種情況發生,而且有太多的併發DML事務處理競爭同一個資料塊,我們就會觀察到下列等待事件 - "enq:TX - 分配ITL條目"的爭用。
排查:
檢查awr的Segments by ITL Waits部分
解決:
此問題的主要解決方案是透過重新建立表或索引來增加ITL容量,並更改INITRANS或PCTFREE引數以處理更多併發事務。 這反過來將有助於減少"enq:TX - 分配ITL條目"的等待事件。
Increase INITRANS
1) Depending on the number of transactions in the table we need to alter the value of INITRANS. here it has been changed to 50:
alter table <table name> INITRANS 50;
2) Then re-organize the table using move (alter table <table_name> move;)
3) Then rebuild all the indexes of this table as below
alter index <index_name> rebuild INITRANS 50;
Increase PCTFREE
If the issue is not resolved by increasing INITRANS then try increasing PCTFREE. Increasing PCTFREE holds more space back and so spreads the same number of rows over more blocks. This means that there are more ITL slots available, overall.如果問題沒有透過增加INITRANS來解決,那麼嘗試增加PCTFREE。 增加PCTFREE會佔用更多的空間,因此會在更多的塊上傳播相同數量的行。 這意味著總體上有更多的ITL插槽可用。
1) Spreading rows into more number of blocks will also helps to reduce this wait event.
alter table <table name> PCTFREE 40;
2) Then re-organize the table using move (alter table service_T move;)
3) Rebuild index
alter index index_name rebuild PCTFREE 40;
A Combination of increasing both INITRANS and PCTFREE(增加INITRANS和PCTFREE的結合)
1) Set INITRANS to 50 and pct_free to 40
alter table <table_name> PCTFREE 40 INITRANS 50;
2) Re-organize the table using move (alter table <table_name> move;)
3) Then rebuild all the indexes of the table as below
alter index <index_name> rebuild PCTFREE 40 INITRANS 50;
1* select name, parameter1, parameter2, parameter3 from v$event_name where name like '&event'
SQL> /
Enter value for event: enq: TX - allocate ITL entry
old 1: select name, parameter1, parameter2, parameter3 from v$event_name where name like '&event'
new 1: select name, parameter1, parameter2, parameter3 from v$event_name where name like 'enq: TX - allocate ITL entry'
NAME PARAMETER1 PARAMETER2 PARAMETER3
------------------------------ --------------- --------------- ---------------
enq: TX - allocate ITL entry name|mode usn<<16 | slot sequence
SQL>
原因;
By default the INITRANS value for a table is one, and for an index is two. This defines an internal block structure called the Interested Transaction List (ITL). In order to modify data in a block, a process needs to use an empty ITL slot to record that the transaction is interested in modifying some of the data in the block. If there are insufficient free ITL slots then new ones will be taken in the free space reserved in the block. If this runs out and too many concurrent DML transactions are competing for the same data block we observe contention against the following wait event - "enq: TX - allocate ITL entry".
預設情況下,表的INITRANS值是1,索引是2。 這定義了一個名為Interested Transaction List(ITL)的內部塊結構。 為了修改塊中的資料,程式需要使用一個空的ITL槽來記錄事務有興趣修改塊中的一些資料。 如果沒有足夠的免費ITL插槽,那麼將在該塊中保留的空閒空間中使用新插槽。 如果這種情況發生,而且有太多的併發DML事務處理競爭同一個資料塊,我們就會觀察到下列等待事件 - "enq:TX - 分配ITL條目"的爭用。
排查:
檢查awr的Segments by ITL Waits部分
解決:
此問題的主要解決方案是透過重新建立表或索引來增加ITL容量,並更改INITRANS或PCTFREE引數以處理更多併發事務。 這反過來將有助於減少"enq:TX - 分配ITL條目"的等待事件。
Increase INITRANS
1) Depending on the number of transactions in the table we need to alter the value of INITRANS. here it has been changed to 50:
alter table <table name> INITRANS 50;
2) Then re-organize the table using move (alter table <table_name> move;)
3) Then rebuild all the indexes of this table as below
alter index <index_name> rebuild INITRANS 50;
Increase PCTFREE
If the issue is not resolved by increasing INITRANS then try increasing PCTFREE. Increasing PCTFREE holds more space back and so spreads the same number of rows over more blocks. This means that there are more ITL slots available, overall.如果問題沒有透過增加INITRANS來解決,那麼嘗試增加PCTFREE。 增加PCTFREE會佔用更多的空間,因此會在更多的塊上傳播相同數量的行。 這意味著總體上有更多的ITL插槽可用。
1) Spreading rows into more number of blocks will also helps to reduce this wait event.
alter table <table name> PCTFREE 40;
2) Then re-organize the table using move (alter table service_T move;)
3) Rebuild index
alter index index_name rebuild PCTFREE 40;
A Combination of increasing both INITRANS and PCTFREE(增加INITRANS和PCTFREE的結合)
1) Set INITRANS to 50 and pct_free to 40
alter table <table_name> PCTFREE 40 INITRANS 50;
2) Re-organize the table using move (alter table <table_name> move;)
3) Then rebuild all the indexes of the table as below
alter index <index_name> rebuild PCTFREE 40 INITRANS 50;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2149632/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- enq: TX - allocate ITL entry等待事件分析ENQ事件
- 關於enq: TX - allocate ITL entry等待事件ENQ事件
- [20150721]enq TX - allocate ITL entryENQ
- 關於enq: TX - allocate ITL entry的問題分析ENQ
- 【MOS】 Troubleshooting waits for enq: TX - allocate ITL entry(1472175.1)AIENQ
- enq: TX - allocate ITL entry等待過多導致全域性死鎖ENQ
- [20140130]關於enq TX-allocate ITL entryENQ
- 【故障處理】佇列等待之TX - allocate ITL entry案例佇列
- [20231026]enq TX - allocate ITL entry的測試4.txtENQ
- 【故障處理】佇列等待之TX - allocate ITL entry引起的死鎖處理佇列
- enq:TX - index contentionENQIndex
- enq: TX - index contentionENQIndex
- TX:ITL LOCK(INITRANS,MAXINTRANS)
- enq: TX - row lock contentionENQ
- enq: TX - index contention等待ENQIndex
- oracle ITL TX MODE 4問題Oracle
- 等待事件enq: TX - row lock contention事件ENQ
- 【等待事件】-enq: TX - row lock contention事件ENQ
- 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 - row lock contentionENQ
- 等待事件enq TX row lock contention分析事件ENQ
- 如何解決enq: TX- index contentionENQIndex
- enq: TX - row lock contention等待事件處理ENQ事件
- enq: TX - index contention故障修復一例ENQIndex
- 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 - index contention' Waits in a RAC Environment. [ID 873243.1]ENQIndexAI
- 【MOS】Troubleshooting 'enq: TX - index contention' Waits (文件 ID 873243.1)ENQIndexAI
- 關於enq: TX - row lock contention行鎖的總結ENQ
- 關於ITL以及UNDO SEGMENT HEADER 事物表(tx table)闡述Header
- 關於enq: TX - index contention 等待的探討與測試ENQIndex
- 20161208理解enq TX - row lock contentionENQ
- ORACLE 歸檔空間滿導致的enq: TX - row lock contentionOracleENQ