甲骨文的ITL

  

  一,ITL描述:   

  

  ITL(感兴趣的事务列表)是甲骨文数据块内部的一个组成部分,位于数据块头(头块),ITL由xid,非洲联合银行,国旗,lck和视交叉上核/fsc组成,用来记录该块所有发生的事务,一个ITL可以看作是一条事务记录。当然,如果这个事务已经提交,那么这个ITL的位置就可以被反复使用了,因为ITL类似记录,所以,有的时候也叫ITL槽位。如果一个事务一直没有提交,那么,这个事务将一直占用一个ITL槽位,ITL里面记录了事务信息,回滚段的入口,事务类型等等。如果这个事务已经提交,那么,ITL槽位中还保存的有这个事务提交时候的scn号。   

  

  ITL个数其最小值为1,由参数initrans控制(由于兼容性的原因,oracle会在对象的存储块分配两个ITL,所以initrans的最小值实际上为2),最大值为255,由参数maxtrans控制,最大值参数在10 g以后不能被修改,ITL是块级的概念,一个ITL占用块46 b的空间,参数initrans意味着块中除去阻止头外一部分存储空间无法被记录使用(46 b * initrans),当块中还有一定的自由空间时,oracle可以使用自由空间构建ITL供事务使用,如果没有了自由的空间,那么,这个块因为不能分配新的ITL,所以就可能发生ITL等待。
  如果在并发量特别大的系统中,最好分配足够的itl个数,其实它并浪费不了太多的空间,或者,设置足够的pctfree,保证itl能扩展,但是pctfree有可能是被行数据给消耗掉的,如更新,所以,也有可能导致块内部的空间不够而导致itl等待。   

  

  转储一个块可以看到ITL信息类似如下:
  ,,,,Itl ,,,,,,,,,, Xid ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Uba ,,,,,,,,,,,,,,,,,,,,,,,,,,,Flag ,,,,Lck ,,,,,,,视交叉上核/Fsc
  ,,,0 x01 ,, 0 x0006.002.0000158e , 0 x0080104d.00a1.6e ,734 - U安康;,,,,,fsc 0 x0000.6c9deff0
  ,,,0 x02 ,, 0 x0000.000.00000000 , 0 x00000000.0000.00 ,,,,,,,,,0,,,,,,fsc 0 x0000.00000000
  ,   

  

  Xid:事务id,在回滚段事务表中有一条记录和这个事务对应   

  

  非洲联合银行:回滚段地址,该事务对应的回滚段地址   

  

  ,第一段地址:回滚数据块的地址,包括回滚段文件号和数据块号   

  

  ,第二段地址:回滚序列号   

  

  ,第三段地址:回滚记录号   

  

  ,选择UBAFIL回滚段文件号,UBABLK数据块号,UBASQN回滚序列号,UBAREC回滚记录号从v $事务——查看非洲联合银行   

  

  国旗:事务标志位。这个标志位就记录了这个事务的操作,各个标志的含义分别是:   

  

  - - - - - -=事务是活动的,或者在块清除前提交事务   

  

  C - - -=事务已经提交并且清除了行锁定。   

  

  - b -=这undo记录包含的撤销ITL条目   

  

  ——U -=事务已经提交(SCN已经是最大值),但是锁定还没有清除(快速清除)。   

  

  ——- t=当块清除的视交叉上核被记录时,该事务仍然是活动的,块上如果有已经提交的事务,那么在清洁ount的时候,块会被进行清除,但是这个块里面的事务不会被清除。   

  

  Lck:影响的记录数   

  

  视交叉上核/Fsc:快速提交(快速提交Fsc)的视交叉上核或者提交Scn。   

  

  <强>每条记录中的行级锁对应于Itl列表中的序号,即哪个事务在该记录上产生的锁。   

  

  ,,   

  

  <>强,二,ITL等待   

  

  ,,,,发生等待的场景:   

  

  ,,,,1 .超过maxtrans配置的最大ITL数   

  

  ,,,,2.initrans不足,没有足够的自由空间来扩展ITL   

  

  ,,,,解决方法:   

  

  ,,,,1. maxtrans不足:这一情况是由高并发引起的:同一数据块上的事务量已经超出了其实际允许的ITL数,因此,要解决这类问题就需要从应用着手,减少事务的并发量;长事务,在保证数据完整性的前提下,增加提交的频率,修改为短事务,减少资源占用事件。而对于OLAP系统来说(例如,其存在高并发量的数据录入模块),可以考虑增大数据块大小。   

  

  ,,,,2.initrans不足:数据块上的ITL数量并没有达到马克斯反式的限制,发生这种情况的表通常会被经常更新,从而造成预留空间(PCTFREE)被填满。如果我们发现这类ITL等待对系统已经造成影响,可以通过增加表的initrans或者PCTFREE来解决(视该表上的并发事务量而定,通常,如果并发量高,建议优先增加initrans,反之,则优先考虑增加PCTFREE)。   

甲骨文的ITL