ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ITL

ITL

原创 Linux操作系统 作者:wadekobe9 时间:2012-04-11 16:59:04 0 删除 编辑



查看T2的事务槽

Select aa.ini_trans,aa.max_trans From dba_tables aa Where table_name='T2'




Create Table t10(Id Int);

Insert Into t10 values(1);

Insert Into t10 values(2);

Insert Into t10 values(3);



查看数据在快上分布的位置

Select Id,dbms_rowid.rowid_relative_fno(Rowid) file#,

dbms_rowid.rowid_block_number(Rowid) block# From t10


一个事务开始以后,在一个数据块上得到一个事务槽,那么在这个事务提交以前,这个事务槽会一直占用,直到这个事务提交释放这个事务槽

只有在已经提交以后,这个itl事务槽中的scn才会有数值。

一个事务在一个数据块上占用一个事务槽



如果是insert,默认每个表的ini_trans  itl是2,尽量保持这个数据块的事务数不超过2,

采用在多个数据块中插入的情况。这样将insert分布到多个数据块中,防止了itl的争用。



三个会话同时修改一个数据块。

事务槽自己增加到了3个。

因为max_trans是255,因此发生ITL争用的几率也很小。

因此基于上面的两种情况来说,ITL发生争用的几率很小。



Cleanout有2种:

1:fast commit cleanout  (提交清除)

2:delayed block cleanout(延迟清除).

提交清除是如何工作的?

Oracle会记录已修改的块列表,这些列表可以有20个块,Oracle根据需要分配多个这样的列表,

但是如果这些修改的块加起来超过buffer_cache的10%,oracle就停止分配这样的列表,因此

当提交时就只会清理最多10%buffer_cache的数据块,其余的部分就延迟清除,这样也是为了

提高commit的效率。U


还有一种情况,就是当事务还未commit时,修改的数据块已经写入硬盘,当发生commit时

oracle并不会把block重新读入做cleanout,而是把cleanout留到下一次对此块的访问是完成。 


注意:对于Oracle来说,对于一个事务,可以是快速提交、也可以是延迟提交。目的都是为了提高提交的速度。

提交以后,oracle需要对ITL事务槽、每一行的锁定标记进行清除。

如果是快速提交,那么在提交的时候,会将事务表和每一个数据块的ITL槽进行清除。但是锁定标记可能没有清除,等下次用到的时候再进行清除。

如果是延迟提交,那么在提交的时候,只是将事务表进行清除,并没有对ITL事务槽进行清除,每一行的锁定标记也没有清除。

块清除的过程并不包括每个行的锁定标记的清除,主要指的是ITL的清除。

 

1、事务是否已经提交、事务对应的SCN,这些信息都是以回滚段事务表中的为主,事务槽中的不准确

2、事务槽中的事务id和uba地址是准确的

3、事务槽1中的事务id和回滚段中的事务id肯定不是一样的,不同回滚段中的事务id也一定不一样。

4、每一个回滚段块中都有一个事务id,记录哪个事务正在使用这个块。

5、回滚事务表可能被覆盖,回滚段也可能被覆盖

对于前者,我们需要增加回滚段

对于后者,我们需要增大回滚段

回滚段也是循环使用的,只有活动的回滚段不会被覆盖


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10678398/viewspace-720935/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-11-30

  • 博文量
    36
  • 访问量
    56490