Oracle 什么时候select会产生redo?
程序员文章站
2024-01-18 18:40:28
...
延迟块清除。事务提交的时候,事务修改的块已经不在内存里了,这个时候,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。
推荐阅读
-
Oracle 什么时候select会产生redo?
-
oracle托马斯回旋乱码问题解决:select*会乱码。select具体字段不乱码
-
Oracle教程:select 操作产生的 redo
-
Oracle教程:select 操作产生的 redo
-
Oracle 什么时候select会产生redo?
-
Oracle数据库(函数(不包括自定函数,自定义函数会单独在后面博文中说明)、Oracle中select语法讲解)
-
oracle托马斯回旋乱码问题解决:select*会乱码。select具体字段不乱码
-
普通表与临时表DML操作会产生REDO/UNDO对比与分析
-
普通表与临时表DML操作会产生REDO/UNDO对比与分析