后台进程二:DBWR进程

一、示意图


二、ocp教材中的解释

写日志进程(LGWR)负责管理重做日志缓冲区,即将重做日志缓冲区条目写入磁盘上的重做日志文件。LGWR会将上次写入后复制到缓冲区中的所有重做条目写入重做日志文件。
重做日志缓冲区是循环缓冲区。当LGWR将重做日志缓冲区的重做条目写入重做日志文件时,服务器进程随后可以复制新条目,覆盖重做日志缓冲区中的那些已经写入磁盘的条目。LGWR的写入速度通常足够快,可以确保缓冲区中始终有空间可供新条目使用,即使对重做日志的访问量很大也是如此。LGWR将缓冲区的一个连续的部分写入磁盘。
LGWR在以下情况下执行写操作:
·用户进程提交事务处理时
·重做日志缓冲区的三分之一已满时
·DBWn进程将经过修改的缓冲区写入磁盘(如果需要)之前
·每个3秒

在DBWn可以写入经过修改的缓冲区之前,必须先将与缓冲区更改相关联的所有重做记录写入磁盘(先行写协议)。如果DBWn发现一些重要的记录尚未写入,则会通知LGWR将这些重做记录写入磁盘,并等待LGWR完成重做日志缓冲区的写操作,然后才会写出数据缓冲区。LGWR将向当前的日志组进行写入。如果改组中的某个文件已损坏或不可用,LGWR将继续写入到改组中的其它文件,并在LGWR跟踪文件和系统预警日志中记录一个错误。如果某个组中的所有文件均已损坏,或者该组由于尚未归档而不可用,则LGWR无法继续工作。

当用户发出COMMIT语句时,LGWR会将一条提交记录放在重做日志缓冲区中,并立即将该记录随同事务处理的重做日志一起写入磁盘中。对数据块进行的相应更改将延迟,直到能够更为高效地写入这些更改时才会执行。这称为“快速提交机制”。包含事务处理的提交记录的重做条目的原子写是个单个事件,该事件可以确定事物处理是否已提交。Oracle DB为提交的事务处理返回一个成功代码,尽管数据缓冲区尚未写入磁盘中。

如果需要更多缓冲区空间,LGWR有时会在提交事务处理之前写入重做日志条目。仅当稍后提交了该事务处理之后,这些条目才会称为永久条目。当用户提交事务处理时,该事务处理将被分配一个系统更改号(scn),Oracle BD将该号码与事务处理的重做条目一起记录在重做日志中。SCN记录在重做日志中,以便可以在Real Application Cluster和分布式数据库之间同步恢复操作。

当活动比较频繁时,LGWR可以使用组提交来写入重做日志文件。例如,假设一个用户提交了一个事务处理。LGWR必须将该事务处理的条目写入磁盘。但在此时,又有其他用户发出了COMMIT语句。但是,LGWR在完成其上一个写操作之前,无法将这些事务处理的重做条目写入重做日志文件以提交这些事务处理。在第一个事务处理的条目写入重做日志文件之后,正在等待(尚未提交)的事务处理的整个重做条目列表将通过一次操作写入磁盘,这比分别处理各个事务处理条目所需要的I/O要少。因此,Oracle DB可以将磁盘I/O降至最少,并最大限度地提高LGWR的性能。如果提交请求的速率一直比较高,则从重做日志缓冲区(由LGWR)进程的每个写操作都可能包含多个提交记录。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值