暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
Oracle ITL(Interested Transaction List)原理解析
582
11页
3次
2020-03-06
5墨值下载
Oracle ITL(Interested Transaction List)原理解析
Ask Oracle 社区 | http://www.askoracle.org
1
1. ITL(Interested Transaction List)介绍
ITL(Interested Transaction List) Oracle 数据块内部的一个组成部分,位于数据块
头(block header), itl xidubaflaglck 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
Oracle ITL(Interested Transaction List)原理解析
Ask Oracle 社区 | http://www.askoracle.org
2
List(Itl)中设置锁标志,记录这个事务在这数据块中产生的锁的数目;同时在对应修改的数
据记录上打上行级锁标志,并映射到对应 Itl 去。当提交时,并丌会一一清除掉所有锁
志,而是给对应的 Itl 打上相应标志,告诉后面访问该数据块的事务,相应的事务已经提交。
这就叫做快速提交(Fast Commit)。
2.1 导出 block 信息
SQL> select * from t;
ID NAME
--------- ------------------------------
1 oracle
2 oracle
3 nosql
SQL> update t set name='mysql' where id=2;
1 row updated
SQL> select
dbms_rowid.rowid_relative_fno(rowid) REL_FNO,
dbms_rowid.rowid_block_number(rowid) BLOCK_NO
from t;
REL_FNO BLOCK_NO
---------- ----------
1 61186
1 61186
1 61186
SQL> alter system dump datafile 1 block 61186;
25 System altered.
SQL> oradebug setmypid;
Statement processed.
SQL> oradebug tracefile_name
/u01/admin/sun/udump/sun_ora_1832.trc
SQL> !vi /u01/admin/sun/udump/sun_ora_1832.trc
2.2 查看 trace 文件(commit )
--------------------
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0001.026.00000150 0x008003c0.0113.17 ---- 1 fsc 0x0000.00000000
0x02 0x0005.013.00000190 0x0080004b.013a.17 ---- 1 fsc 0x0001.00000000
--------------------
block_row_dump:
Oracle ITL(Interested Transaction List)原理解析
Ask Oracle 社区 | http://www.askoracle.org
3
tab 0, row 0, @0x1f6e
tl: 13 fb: --H-FL-- lb: 0x0 cc: 2
col 0: [ 2] c1 02
col 1: [ 6] 6f 72 61 63 6c 65
tab 0, row 1, @0x1f55
tl: 12 fb: --H-FL-- lb: 0x2 cc: 2 --对应 itl 0x02
col 0: [ 2] c1 03
col 1: [ 5] 6d 79 73 71 6c
tab 0, row 2, @0x1f61
tl: 13 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 2] c1 04
col 1: [ 6] 6f 72 61 63 6c 65
end_of_block_dump
2.3 查看 trace 文件(commit ):即产生快速提交
----------------
Start dump data blocks tsn: 0 file#: 1 minblk 61186 maxblk 61186
buffer tsn: 0 rdba: 0x0040ef02 (1/61186)
scn: 0x0000.000d206f seq: 0x01 flg: 0x02 tail: 0x206f0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
----------------
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0001.026.00000150 0x008003c0.0113.17 ---- 1 fsc 0x0000.00000000
0x02 0x0005.013.00000190 0x0080004b.013a.17 --U- 1 fsc 0x0001.000d206f
-----------------
block_row_dump:
tab 0, row 0, @0x1f6e
tl: 13 fb: --H-FL-- lb: 0x0 cc: 2
col 0: [ 2] c1 02
col 1: [ 6] 6f 72 61 63 6c 65
tab 0, row 1, @0x1f55
tl: 12 fb: --H-FL-- lb: 0x2 cc: 2 --对应 itl 0x02
col 0: [ 2] c1 03
col 1: [ 5] 6d 79 73 71 6c
tab 0, row 2, @0x1f61
tl: 13 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 2] c1 04
col 1: [ 6] 6f 72 61 63 6c 65
end_of_block_dump
对比两次 ITL(快速提交前后)信息发现:ITL 0x02 Flag 由‘----’变成‘--U-',
即事物有活动变为已提交(Scn/Fsc 也发生了变化) 但我们可以看 Lck 还是 1也就是说
of 11
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。