Oracle 什么时候select会产生redo?

本文探讨了Oracle数据库中redo产生的两种情况:快速块清除(commit cleanout)与延迟块清除。前者在事务提交时标记数据块已提交状态,后者则在下次读取已提交的块时进行,并产生redo。

什么情况下select会产生redo ?

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

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

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

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

转载于:http://blog.itpub.net/22034023/viewspace-735469/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值