您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Oracle 什么时候select会产生redo?

2025/4/19 0:17:40发布26次查看
延迟块清除。事务提交的时候,事务修改的块已经不在内存里了,这个时候,oracle不会再从磁盘把块读取到内存里做块清除,而是在下
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。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product