块清除(block clean out)

    块清除(block clean out) 是指把一个块中的数据从dirty 变为clean,等于告诉后面 的人,这个块里面的数据是干净的,可以放心的使用,本质上是更改block header 中的一 个标志位。
1.快速块清除(fast block clean out)
    当发生fast commit cleanout,系统将transaction 提交时刻的scn 作为commit scn, 更新block 上事物槽(itl)和undo segment header 的Transaction table 的slot 上的scn, 并修改block scn,三者是一致的。

2. 延迟块清除
        有时候在执行select 操作的时候也可能会产生redo,一个可能原因就是oracle 块清除。 在进行块清除的时候,如果是一个大事务,就会进行延迟块清除。 COMMIT 实际的释放方式即清除块上相应的事务槽,但这里存在一个性能的考量。
        设 想一个UPDATE 大量数据的操作,因为执行时间较长,一部分已修改的块已被缓冲池flush  out 写至磁盘,当UPDATE 操作完成执行COMMIT 操作时,则需要将那些已写至磁盘的数 据块重新读入,这将消耗大量I/O,并使COMMIT 操作十分缓慢;为了解决这一矛盾,Oracle 使用了延迟块清除的方案,对待存在以下情况的块COMMIT 操作不做块清除: 在更新过程中,被缓冲池flush out 写至磁盘的块 若更新操作涉及的块超过了块缓冲区缓存的10%时,超出的部分块。 虽然COMMIT 放弃对这些块的块清除(block cleanout)操作,但COMMIT 操作仍会修改 回滚段的段头,回滚段的段头包括了段中的事务的字典,COMMIT 操作将本事务转化为非 ACTIVE 状态。
       当下一次操作如SELECT,UPDATE,INSERT 或DELETE 访问到这些块时可能需要在读 入后完成块清除,这样的操作称之为块延迟清除(deferred block cleanout);块延迟清除通过 事务槽上的回滚段号,槽号等信息访问回滚段头的事务字典,若事务不再活跃或事务过期则 完成清除块上的事务槽,事务槽清除后继续执行相应的操作。

        块延迟清除的影响在SELECT 操作过程中体现的最为明显。总结来说块延迟清除是 COMMIT 操作的一个延续,始终是一种十分轻微的操作,且该种操作是行级的,不会使段 (Segment)的属性有所改变。

相关知识补充:
================================事物槽==============================
ITL(Interested Transaction List)是Oracle 数据块内部的一个组成部分,位于数据块头 (block header),itl 由xid,uba,flag,lck 和scn/fsc 组成,用来记录该块所有发生的事务, 一个itl 可以看作是一条事务记录。 当然,如果这个事务已经提交,那么这个itl 的位置就可以被反复使用了,因为itl 类似 记录,所以,有的时候也叫itl 槽位。如果一个事务一直没有提交,那么,这个事务将一直 占用一个itl 槽位,itl 里面记录了事务信息,回滚段的入口,事务类型等等。如果这个事务 已经提交,那么,itl 槽位中还保存的有这个事务提交时候的SCN 号。
================================事物槽==============================

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

转载于:http://blog.itpub.net/30208428/viewspace-1813361/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值