每个块都有一个块首部。这个块首部中有一个事务表。事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定。这个事务表的初始大小由对象的INITRANS 设置指定。对于表,这个值默认为1(索引的INITRANS 默认为2)。事务表会根据需要动态扩展,最大达到MAXTRANS 个条目(假设块上有足够的自由空间)。所分配的每个事务条目需要占用块首部中的23~24 字节的存储空间。注意,对于Oracle 10g,MAXTRANS 则会忽略,所有段的MAXTRANS 都是255。
也就是说,如果某个事务锁定了这个块的数据,则会在这个地方记录事务的标识,当然那个事务要先看一下这个地方是不是已经有人占用了,如果有,则去看看那个事务是否为活动状态。如果不活动,比如已经提交或者回滚,则可以覆盖这个地方。如果活动,则需要等待(闩的作用)
所以,如果有大量的并发访问使用的这个块,则参数不能太小,否则资源竞争将导致系统并发性能下降。
INITRANS and MAXTRANS
Each block in an object has a block header. Part of this block header is a transaction table,
entries will be made in the transaction table to describe which transactions have what
rows/elements on the block locked. The initial size of this transaction table is specified by
the INITRANS setting for the object. For tables this defaults to 1 (indexes default to 2).
This transaction table will grow dynamically as needed up to MAXTRANS entries in size
(given sufficient free space on the block that is). Each allocated transaction entry consumes
23 bytes of storage in the block header
摘自:Expert One on One Oracle