
武汉誉天教育 www.yutianedu.cn
誉天 IT 认证下载站:www.51chongdian.net 华中 Oracle 技术交流群 95720285
数据文件。
9. 写回数据文件的步骤结束之后,通知 LGWR 处理已经结束。
10. LGWR 会把被写入日志缓冲区变更的 REDO 日志文件从 1 改为 2(log switch)。
11. 如果以归档模式运行数据库,在纪录数据库变更后已满的 REDO 日志文件会被写出
到归档文件。
上次我们说明了 REDO 日志的基本处理流程,这次将详细介绍其中的 LGWR 进程,
该进程执行 REDO 日志文件写入处理。
LGWR 将来自 log Buffer 的 commit/rollback 信息写入到 REDO 日志文件,
这些信息用于在数据库发生故障时恢复数据库。在频繁执行 Update 操作的情况
下,LGWR 会满负荷运行。这时, REDO 日志文件写入操作的 I/O 性能就成为影响
响应速度的关键因素。
LGWR 操作在下列时间点会发生:
1. 距上次的写入达到 3 秒
2. 事务被提交(commit)
3. REDO 日志缓冲区使用量达到 3 分之 1 的时候
4. DBWR 要往数据文件执行写回动作之前
5. 出现 checkpoint 的时候
对于数据库内所有被更改的数据块,Oracle 会把所有更改内容记录在 REDO
日志缓冲区。更改内容包括数据段,索引段和回滚段(rollback segment)。数
据库内任意数据块所产生的一次更改,会被记录为一个变更向量(Change
Vector)。变更向量里包含了发生变化的数据块的地址和更新前的数据。
数据库记录变更的最小单位是变更向量,一系列相关变更向量的集合称为重
做记录(REDO Record)。有些事务(transaction)会产生不止一个重做记录,
每个重做记录里都包含了一连串的变更向量
关于 REDO 日志的基本概念“change vector”以及“REDO record”的说明。
※change vector
表示对数据库内某一个数据块所做的一个变更,change vector 容纳了变更
的数据块的地址(DBA)以及更新后的数据。
※REDO record
记录单一数据库变更的一系列 change vector 构成 REDO record,有些
transaction 会产生不只一个 REDOrecord,每个 REDO record 各有一连串的
change vector。
假如执行了 10 件更新处理,会产生 10 笔 REDO record,每个 REDO record
里都有多个 change vector,在创建这个 REDO record(change vector)的过程中
会产生大量的未使用(浪费)的空间。换句话说,由于创建 REDO record(change
vector)时执行写入是以数据块为单位的,所以会产生空间浪费。
在编写程序的时候要集中 transaction 再进行处理,这是节省 REDO 日志文
件资源的重点。
评论