表中的某一行被一个事务锁定,这个锁的信息会被记录在行所在的块头内。
当另一个事务想去获取该行级锁时,它不得不去搜索块头内包含的信息,
直到获得这个锁,这个很容易知道锁的信息是存放在块头内的。
那块头存放的是关于锁的哪一部分信息的呢?它是一种简单的数据结构“ITL” ,
一个包含事务地址各rowid的维护信息的连接列表。ITL包含多个事务的事务槽
或标识。当块里的某一行第一次被锁,事务会在其中一个事务槽内标识此行已
被锁定,其它事务所锁定这个块的其它行时,信息会存入到该块的其它的事务槽中。
录事务回滚或提交后,锁被释放,事务槽也会被重新使用,因些这个队列是块级别的。
表的事务槽的数量是由表的参数MAXTRANS决定的。ITL不能创建更多的自由事务槽或
MAXTRANS值已经接近,此时就会产生“equeue"的等待事件。
阅读(1079) | 评论(0) | 转发(0) |