当buffer cache中的数据块被修改后,服务器进程生成redo数据并写入到redo log buffer中。当满足以下条件时,LGWR会将redo log bu
当buffer cache中的数据块被修改后,服务器进程生成redo数据并写入到redo log buffer中。当满足以下条件时,LGWR会将redo log buffer中的条目开始写入在线重做日志:
--redo log buffer满1/3.
--每3秒超时(Timeout).
--log_buffer中的数据到达1M.
--事务提交时.
当LGWR将redo log buffer中的重做条目写入到在线重做日志文件或磁盘后,用户进程就可以复制新的条目到redo log buffer,以覆盖内存中被写入到磁盘的条目。LGWR写入速度通常很快,足以确保缓冲区的空间总可以写入新条目,,即使在对重做日志的访问很频繁时也是如此。
如果我们的系统拥有快速处理器和I/O相对较慢的磁盘,处理器可能会填满缓存区的其余空间,这时会促使LGWR移动缓冲区的部分数据到磁盘。在这种情况下,较大的日志缓冲区能够临时掩盖较慢磁盘对系统带来的影响。你这可做下面的选择:
--提升checkpoint或归档进程
--提升LGWR性能(也许你可以将所有的在线重做日志放置到速度更快的裸设备)
合理使用redo log buffer:
--执行批量操作时使用批量提交,以至LGWR能够更高效的写入重做条目到在线重做日志文件中。
--当加载大量数据时,使用nologging操作。
设置Log Buffer
redo log buffer由初始化参数LOG_BUFFER决定,修改该参数需要重启实例。
适当的redo log buffer参数值能够明显的提升系统吞吐量,尤其对于插入,更新,删除大数据量的系统。
默认的log buffer值:MAX(0.5M,(128K*number of cpus)),通常默认值是足够的。
增加log buffer的值对系统性能或可恢复性不会产生负面影响,而仅仅会使用额外的内存。
评估Log Buffer
关注redo buffer allocation retries等待事件:用户进程等待redo log buffer空间的次数。
[sql]
redo buffer allocation retries的值应该接近于0。这个等待由log buffer太小或checkpointing导致。你可以增加log buffer的值,或者提升checkpointing或归档进程。
[sql]
如果出现log buffer space等待事件,或将重做日志文件移动到更快的磁盘,如条带化磁盘。