enq: TX - row lock/index contention、allocate ITL等待事件
SQL> select name from v$event_name where name like '%TX%';
NAME
----------------------------------------------------------------
enq: TX - row lock contention
enq: TX - allocate ITL entry
enq: TX - index contention
enq: TX - contention
enqueue TX事务锁 transaction enqueue,顾名思义这个队列锁用来保护事务信息。
当进程修改某块中的一行数据,则Oracle必须将该事务信息与被改变的这一行联系起来,做法是在块中的row piece的lk上标记ITL位,而实际的ITL记录了这个事务相关的回滚段号USN,以便能够定位其撤销链。
这样做的目的有几个:
- 允许用户手动rollback或者因为dead transaction的发生而后台(PMON or SMON 取决于_cleanup_rollback_entries)回滚该事务。
- 在块中留下Undo线索,才能让查询者Queryer顺藤摸瓜去构造这个块在事务发生前的镜像块
- 等待块上的ITL slot
- 由于主键、唯一索引约束而等待
- 由于位图索引bitmap index而等待
- 因为2 phase commit,2段提交而等待
- 当2个session试图向一个unique index插入同一个索引键值时,后插入的那个session如此等待,知道先插入的session commit/rollback,则后一个session对应的ORA-0001或插入成功。
- 当一个session因为bitmap index fragment而等待。位图索引bitmap index是一些索引键值加上ROWID的范围。位图索引中的每一条记录可以映射为实际表上的多条记录。 若2个session试图更新的行映射到同样的位图索引记录,则后者的session需要在前者commit/rollback之前一直等request=4的TX lock。
- 当等待一个PREPARED transaction时也会出现mode 4的TX
- 还有就是使用dbms_repair时也可能看到mode 4的TX
posted on 2013-03-19 00:47 Oracle和MySQL 阅读(402) 评论(0) 编辑 收藏 举报