itl争用
所有事务在修改块之前,必须在块头的ITL上登记条目。当在块头上请求登记itl条目时,如果数据块上没有足够的ITL槽(slot),itl tx等待会发生。
影响itl的因素
initrans 初始分配的itl条目数
maxtrans 最大itl条目数(10g不能更改,为255)。
pctfree 空闲空间所占块比例,虽然pctfree预留了空间,但是update操作可能会将其占用,导致块空间不足,以致可能没有空间分配itl条目。
SQL> create table itl_test(id int,text varchar2(100)) pctfree 0;
表已创建。
SQL> begin
2 for i in 1..10000 loop
3 insert into itl_test values(i,'hello world!');
4 end loop;
5 commit;
6 end;
7 /
PL/SQL 过程已成功完成。
SQL> select distinct dbms_rowid.rowid_relative_fno(rowid) fno, dbms_rowid.rowid_block_number(rowid) bno from itl_test wh
ere rownum < 5000 order by fno,bno;
FNO BNO
---------- ----------
4 468
4 469
4 470
4 471
4 472
4 473
4 474
4 475
4 476
4 477
4 478
FNO BNO
---------- ----------
4 479
4 480
4 482
已选择14行。
SQL> select distinct dbms_rowid.rowid_relative_fno(rowid) fno, dbms_rowid.rowid_block_number(rowid) bno from itl_test wh
ere id between 4900 and 5000 order by fno,bno;
FNO BNO
---------- ----------
4 485
SQL> update itl_test set text='hi,morning!' where id=4901
2 ;
已更新 1 行。
--session2
SQL> update itl_test set text='hi,morning!' where id=4902;
1 row updated
--session3
SQL> update itl_test set text='hi,morning!' where id=4903; --出现了等待
在session1中查询等待事件
SQL> SELECT t.EVENT,t.SID FROM v$session t where t.EVENT LIKE '%ITL%';
EVENT SID
---------------------------------------------------------------- ----------
enq: TX - allocate ITL entry 147
由于pctfree为0,块中没有足够的空间分配ITL,才出现ITL等待,当session1事务提交后,等待消失,也就是 当事务提交之后,才能重用ITL。
查看表itl_test的ddl
PCTFREE 0 PCTUSED 40 INITRANS 1 MAXTRANS 255
可知, INITRANS默认为1,而dump出来的trace文件中显示了两条itl条目,MAXTRANS默认为255。
将块485 dump:
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0007.006.00000222 0x0080b62e.030e.0a C--- 0 scn 0x0000.002367a8
0x02 0x0004.00a.00000227 0x008003bc.015c.05 ---- 1 fsc 0x0001.00000000
.
.
.
.
fsbo=0x2f0
fseo=0x2f3
avsp=0x2
从dump的trace文件中可以看出有 两个itl条目(Itl),并且该块已经没有空间,虽然没有达到MAXTRANS,不能再分配itl条目。
所以对于事务频繁的表,创建表时应设置较高的INITRANS,以解决itl争用问题。对于发生了行迁移与行链接的行,更新一行时,对多个块都要分配itl条目,因此发生itl条目不足引起的itl争用现象的概率会增加。
如果是应用造成的itl争用,只能修改应用。
参考:
http://blog.csdn.net/robinson1988/article/details/4721605