【Oracle】-【体系结构-LGWR】-LGWR的一些理解

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: LGWR的一些理解:LGWR,是Log Writer的缩写,也是一种后台进程。主要负责将日志缓冲内容写到磁盘的在线重做日志文件或组中。DBWn将dirty块写到磁盘之前,所有与buffer修改相关的redo log都需要由LGWR写入磁盘的在线重做日志文件(组),如果未写完,那么DBWn会等待LGWR,也会产生一些相应的等待事件(例如:log file prarllel write,后面单独作为话题再聊)。

LGWR的一些理解:


LGWR,是Log Writer的缩写,也是一种后台进程。主要负责将日志缓冲内容写到磁盘的在线重做日志文件或组中。DBWn将dirty块写到磁盘之前,所有与buffer修改相关的redo log都需要由LGWR写入磁盘的在线重做日志文件(组),如果未写完,那么DBWn会等待LGWR,也会产生一些相应的等待事件(例如:log file prarllel write,后面单独作为话题再聊)。总之,这样做的目的就是为了当crash时,可以有恢复之前操作的可能,也是Oracle在保持交易完整性方面的一个机制。


相关知识点:

1、LGWR写日志是顺序写,这就解释了一个Orace Server只能有一个LGWR进程,不能像DBWR那样可以有多个,否则就无法保证顺序写的机制,而且可能会产生锁的问题。

2、用户进程每次修改内存数据块时,都会在日志缓冲区(redo buffer)中构造一个相应的重做条目(redo entry),它记录了被修改数据块修改之前和之后的值。

3、LGWR将redo entry写入联机日志文件的情况可以概括为两种:后台写和同步写,或者说异步写和同步写。

后台写的条件:

(1)、每3秒LGWR启动一次。

(2)、DBWR启动时如果发现dirty块对应的redo entry还没写入联机日志文件,则DBWR触发LGWR进程并等待LGWR完成后继续。

(3)、redo entry数量达到整个log buffer的1/3时,触发LGWR。

(4)、redo entry的数量达到1M。

同步写的条件:

COMMIT。即执行COMMIT时,必须等待log buffer进行flushing操作(可能产生log file sync等待事件),写入磁盘中的联机日志文件。但一般上述1/3满的条件触发LGWR,几乎强制LGWR实时写,因此当需要执行COMMIT,可能没有任何redo entry需要写入了。

4、3秒触发LGWR的规则,事实上,这个超时是DBWR的,但是因为LGWR总在DBWR调用之前执行,因此效果上也相当于LGWR的超时是3秒即调用。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
存储 SQL Oracle
初步了解oracle的体系结构
初步了解oracle的体系结构
41 1
|
6月前
|
存储 SQL Oracle
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
114 7
|
6月前
|
存储 SQL Oracle
Oracle系列十九:Oracle的体系结构
Oracle系列十九:Oracle的体系结构
|
存储 SQL 运维
Oracle数据库系统管理与运维 | Oracle体系结构与性能优化
Oracle数据库系统管理与运维 | Oracle体系结构与性能优化
272 0
Oracle数据库系统管理与运维 | Oracle体系结构与性能优化
|
Oracle 关系型数据库 数据库
|
SQL 存储 监控
Oracle 11g R2 体系结构
 Oracle 11g R2体系结构 安装oracle软件----创建数据库----在数据库中创建表----表里存储信息---这些表文件需要存储在物理硬盘上面。 假如有一个用户(这个用户可以是远程用户,也可以是本地的,也可以是一个应用程序)连接到oracle数据库上面,用户是不能直...
1083 0
|
Oracle 关系型数据库 数据库
|
SQL 监控 Oracle
|
存储 Oracle 关系型数据库
|
SQL 监控 Oracle