ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle 什么时候select会产生redo?

Oracle 什么时候select会产生redo?

原创 Linux操作系统 作者:wei-xh 时间:2012-07-14 16:47:42 0 删除 编辑

什么情况下select会产生redo ?

1`)快速块清除或者叫commit cleanout。事务提交的时候,oracle针对内存里的块 1)把数据块ITL  ENTRY里flag的标记为U 2)设置commit scn在Scn/Fsc列。有了两个标记就可以告诉全世界这个事务已经提交。但ITL ENTRY 的Lck标志和每个数据行头的lb(锁定位信息)并不会清除。Oracle 做commit cleanout并不会产生日志,这个你可能会感到比较奇怪,修改了块,但是却没产生日志。其实这个产生日志的过程在后面的完整的块清除的时候才做。也就是我们下一次读取到这个数据块的时候。

2)延迟块清除。事务提交的时候,事务修改的块已经不在内存里了,这个时候,Oracle不会再从磁盘把块读取到内存里做块清除,而是在下一次读取数据块的时候,做块清除的动作。这个块清除的动作会产生Redo。

需要注意直接路径读取由于绕过了buffer_cache,读取过程直接在进程的私有PGA里来完成,这个过程也会在进程私有的内存里构造CR块,虽然这个过程里也会有延迟块清除发生,但是不会产生Redo,而且不会把“脏”数据写会到磁盘。这意味着,如果这个表一直被直接路径读取,将会有许多的浪费的延迟块清除发生。11G针对大表的全表扫描,11G前并行扫描都会产生直接路径的读取。但是直接路径读取即使遇到了需要做延迟块清除的块也不会产生Redo。

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

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2425343