Oracle什么情况下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。checkpoint queue和lruw链表在功能上的差异Oracle Dba必须了解的buffer busy waits等待相关资讯 Oracle基础
- Oracle基础介绍及常用相关SQL*PLUS (03月11日)
- Oracle 角色的两个特性和误区 (09/04/2012 05:56:16)
- Oracle rac11.2.0.3.0的vip在重启 (09/02/2012 10:00:39)
| - Oracle中删除用户遇到的问题 (09/08/2012 20:01:42)
- IMP-00008: unrecognized (09/02/2012 10:03:25)
- 在Oracle数据库上设置限制ip地址访 (09/02/2012 09:59:55)
|
本文评论 查看全部评论 (0)