书名书名书名书名书名书名书名书名书名书名书名书名书名书名
·2·
Log Buffer 之中。Redo Entries 在内存中占用连续的顺序空间,由于 Redo Log Buffer 是循环使
用的,Oracle 通过一个后台进程 LGWR 不断的把 Redo Log Buffer 的内容写出到 Redo Log File
中,Redo Log File 同样是循环使用的。图 7-2 说明了 Redo Log Buffer、LGWR 以及 Redo Log File
三者之间的关系。
图 7-2
7.2 Redo 的原理
通过前面的章节,我们已经知道,用户数据通常在 Buffer Cache 中修改,Oracle 通过高速
缓存来提高数据操作的性能。当用户在 Buffer Cache 中修改数据时,Oracle 并不会立即将变
更数据写出到数据文件上,因为独立的离散写出效率会很低。到目前为止,计算机系统中最
容易出现瓶颈的仍然是磁盘的 I/O 操作,Oracle 这样做的目的是为了减少 IO 的压力,当修改
过的数据达到一定数量之后,可以进行高效地批量写出。
大部分传统数据库(当然包括 Oracle)在 处 理 数 据 修 改 时 都 遵 循 no-force-at-commit 策略。
也就是说,在提交时并不强制写。那么为了保证数据在数据库发生故障时(例如断电)可以恢复,
Oracle 引入了 Redo 机制,通过连续的、顺序的日志条目的写出将随机的、分散的数据块的写
出推延。这个推延使得数据的写出可以获得批量效应等性能提升。
同 Redo Log Buffer 类似,Redo Log File 也是循环使用的,Oracle 允许使用最少两个日志
组。缺省的,数据库创建时会建立 3 个日志组。
SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
评论