
Oracle ITL(Interested Transaction List)原理解析
Ask Oracle 社区 | http://www.askoracle.org
1. ITL(Interested Transaction List)介绍
ITL(Interested Transaction List)是 Oracle 数据块内部的一个组成部分,位于数据块
头(block header), itl 由 xid,uba,flag,lck 和 scn/fsc 组成,用来记录该块所有发生
的事务,一个 itl 可以看作是一条事务记录
当发出一条 sql 语句时,ORACLE 会记录下这个时刻(SCN),然后在 buffer cache 中查
找需要的 BLOCK,戒者从磁盘上读。当别的会话修改了数据,戒者正在修改数据,就会在相
应的 block 上记录 ITL,此时 ORACLE 发现 ITL 中记录的 SCN(Scn/Fsc)大于 SELECT 时刻的
SCN,那么 ORACLE 就会根据 ITL 中的 Uba 找到 UNDO 信息获得该 block 的前镜像,然
后在 buffer cache 中构造出 CR(consistent read)块,此时 ORALCE 也会检查构造出来的
BLOCK 中 ITL 记录的 SCN(Scn/Fsc),如果 SCN(Scn/Fsc)还大于 select 时刻的 SCN,那
么一直重复构造前镜像,然后 ORACLE 找到前镜像 BLOCK 中的 ITL 的 SCN 是否小于 select
的 SCN,同时检查这个事物有没有提交戒者回滚,如果没有,那么继续构造前镜像,直到找
到需要的 BLOCK,如果在构造前镜像的过程中所需的 UNDO 信息被覆盖了,就会报快照
过旧的错误。
注意:此实验环境在 10g 以前版本操作,10g 以后 MAXTRANS 参数被废弃,默认最大支
持 255 个并发。
2. ITL Cleanout 和 Delayed block cleanout
在接触 ITL Cleanout 和 Delayed block cleanout 之前先了解一个概念--快速提交:
在事务提交(commit)前,会在数据块的头部记录下这个 Cleanout SCN(Csc)号、Undo
Block Address(Uba)和 Transaction ID(Xid);并且在在对应 Interested Transaction
评论