`
itspace
  • 浏览: 978975 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

谈谈log file sync

 
阅读更多
数据库中的log file sync等待事件指的是,当user session 提交(commit)时,user session会通知LGWR进程将redo buffer中的信息写入到redo log file,当LGWR进程完成写操作后,LGWR进程再post(通知)user session 写操作已经完成,user session 接收到LGWR的通知后提交操作才完成。因此user session 在没有收到LGWR post(通知)之前一致处于等待状态,具体的等待事件为log file sync。根据实践经验,引起log file sync等待事件的原因有以下几种:
 事务过度的提交,即应用程序过度commit或者rollback。
 存储I/O资源紧张,导致lgwr进程写速度缓慢。
 CPU资源紧张,lgwr进程获得不了响应的CPU时间片。
 RAC节点之间SCN同步。
 RAC节点之间CR块传递。
 控制文件争用。
不同的原因,其解决方法会不同,当多种原因混合在一起时,则需要进行综合考虑。
事务过度提交
事务过度提交是引起log file sync等待事件的主要原因之一。前面提到,默认情况下,当事务提交时,LGWR进程会将事务相关的日志条目立即写至redolog中,直到日志写成功之后才显示提交成功。所以事务提交越频繁,触发LGWR进程写操作越频繁,引起log file sync等待时间的可能性越大。所以当由于事务过度提交引起log file sync等待事件时,最好的解决方法是修改应用,将小事务变成大事务。可在很多情况下,修改应用不是很简单的事情,需要应用厂商配合。当应用厂商配合程度不足时,我们就需要在DB端想办法了。所幸的是从Oracle 10g开始,Oracle推出了新的数据库参数commit_write用于控制LGWR进程写日志操作,其默认值为空,表示wait和immediate。也可以将其在线修改(即参数值修改后不需要重启数据库就能生效)成nowait和batch,表示事务提交时,LGWR进程并不马上将事务相关条目写至日志文件中,而是异步模式将相关条目批量(batch)写至日志文件中。所以采用这种方法,在缓减了log file sync等待事件的同时,数据库异常宕机后可能会引起数据丢失,所以要引起注意!
当然使用临时表或者NOLOGGING选项,尽可能少产生redo日志,也是解决log file sync等待事件的方法之一。
存储I/O资源紧张
LGWR进程写redolog特征是连续顺序小I/O写,存储的IOPS能力对其影响最大。当存储I/O资源紧张时,LGWR进程写日志的速度就受到明显影响,从而出现log file sync等待事件。如果要确定是否是存储I/O资源紧张导致log file sync等待事件,我们通常情况下只要检查以下两方面:
(1)检查存储的I/O资源是否紧张,如在AIX系统中可以通过topas命令观察磁盘的繁忙程度,如下所示:

(2)检查系统每次等待log file parallel write等待事件和log file sync等待事件的时间差,如果两者时间接近,则说明存储I/O资源紧张是引起log file sync等待事件的主要原因。log file parallel write等待事件和log file sync等待事件的关系如下图所示:

我们可以通过V$EVENT_HISTOGRAM视图观察log file parallel write等待事件消耗时间的分布情况,如下所示:
SQL> select event, wait_time_milli,wait_count
2 from v$event_histogram
3 where event = 'log file parallel write';
EVENT                   WAIT_TIME_MILLI  WAIT_COUNT
---------------------------------------------------
log file parallel write     1                22677
log file parallel write     2                  424
log file parallel write     4                  141
log file parallel write     8                  340
log file parallel write     16                1401
log file parallel write     32                 812
log file parallel write     64                 391
log file parallel write     128                 21
log file parallel write     256                  6
当由于存储I/O资源紧张而导致log file sync等待事件时,我们可以采取以下措施:
1、如果有空闲的物理磁盘,且这些物理磁盘的I/O性能能满足系统要求,那么将logfile在线迁移至空闲物理盘中。如果空间允许,还可以考虑将数据库的UNDO表空间在线迁移至其他盘,从而释放I/O压力。
2、如果在线日志设置了多组member,为了减少LGWR写日志操作,可以考虑删除其他member,只保留一组。
CPU资源紧张
主机CPU资源紧张从而导致LGWR进程获得不了CPU时间片也可能导致log file sync等待事件。某系统由于主机CPU资源紧张,而出现较多的log file sync等待事件,CPU资源如下所示:

数据库的AWR报告显示log file sync等待比较严重,如下所示:

事实上,LGWR进程写存储的速度并不慢,log file parallel write等待事件每次才等待2ms,如下所示:

针对CPU资源紧张而导致log file sync等待事件,有以下几种解决方案:
1、增加CPU资源,优化消耗CPU资源的语句,这是效果最为明显的解决方法,但同时成本也较高。
2、在操作系统级别使用renice命令提交LGWR进程优先级,如果存在多颗CPU,为减少LGWR进程轮询CPU时间,可以将其绑定在某颗CPU上运行。
3、在数据库级别设置隐含参数_high_priority_processes提高LGWR进程优先级。
RAC节点之间SCN同步
在RAC数据库中为了一致性读,需要将Commit SCN同步/传播到所有的节点上。SCN同步/传播的主要方法有两种:Lamport SCN 和 immediate commit propagation。其中immediate commit propagation这种方式就也被称为BOC(Broadcast On Commit)。
Oracle 10gR1 及以下版本默认使用Lamport SCN,Lamport SCN方式即一个节点上的commit SCN 不保证立刻同步/传播到所有节点,也就是说可能延时同步/传播,对于一些实时性要求高的RAC数据库Lamport SCN方式是不可取的。如果希望commit SCN 立刻同步/传播到所有节点,手动修改参数MAX_COMMIT_PROPAGATION_DELAY=1。
从Oracle 10gR2开始默认使用immediate commit propagation (BOC),即一个节点上的commit SCN 立刻同步/传播到所有节点(受隐含参数_immediate_commit_propagation控制,默认为true)。
immediate commit propagation (BOC)的原理如下:
(1) user session 执行提交(commit),user session会通知LGWR进程将redo buffer中的信息写入到redo log file。
(2) LGWR进程收到user session通知后,将redo buffer中的信息写入redo log file,同时LGWR进程 将COMMIT SCN 同步/传播给远程的数据库实例的LMS 进程。
(3) 远程数据库实例的LMS将commit SCN同步到本地SCN,然后通知commit实例的LMS进程,表示SCN 同步已经完成。
(4) 当commit 实例的LMS进程接收到所有远程数据库实例的LMS进程的通知后,commit 实例的LMS进程再通知本地的LGWR 所有节点SCN同步已经完成。
(5) LGWR进程 在完成了IO 操作和LMS进程通知后,LGWR进程通知user session commit 成功。user session在没有收到LGWR进程通知前,一直处于等待log file sync。
RAC节点之间SCN传递的指标可以在AWR报告中观察,如下所示:

当log file sync等待事件是由于RAC节点之间SCN同步引起的,其解决方法如下:
1、检查LMS进程数量是否足够。
2、检查系统CPU资源是否足够。
3、检查RAC节点之间的私有通信是否正常。
4、设置隐含参数_immediate_commit_propagation为false,禁用immediate commit propagation特性。
RAC节点之间CR块传递
Oracle为了保证Instance Recovery实例恢复机制,而要求每一个current block在本地节点local instance被修改后(modify/update) 必须要将该current block相关的redo 写入到logfile 后(要求LGWR必须完成写入后才能返回),才能由LMS进程传输给其他节点使用。如下图所示:

某客户数据库出现log file sync等待事件,正是由于这种机制引起的。AWR报告如下所示:



当出现这种情况时,其解决方法如下:
1、修改应用尽量减少跨节点取数据。
2、修改隐含参数_cr_server_log_flush为fasle(默认为true),关闭CR块节点传输特性。
控制文件争用
LGWR进程写日志的同时会在控制文件中记录写进度。当控制文件争用而出现enq: CF–contention等待事件时,前台进程可能会出现LOG FILE SYNC等待。AWR报告部分数据如下所示:

由于LGWR进程写日志的过程中需要更新控制文件。当RMAN操作比较频繁时(如利用RMAN批量删除归档),服务器进程也会更新控制文件,所以多个会话同时更新控制文件时可能会引起enq:CF–contention等待事件。当LGWR进程获得不了CF锁时,可能导致LOG FILE SYNC等待。这个案例再次表明了Oracle是一台巨大的同步机器,看起来风马牛不相及的东西,往往存在着相互因果关系。
分享到:
评论

相关推荐

    LOG FILE SYNC概述

    【LOG FILE SYNC】是Oracle数据库中常见的等待事件,主要涉及事务提交、回滚、DDL操作以及数据字典的修改。当事务执行完一系列操作后,需要将redo日志记录写入磁盘,以保证数据的一致性和持久性,此时就会发生LOG ...

    Oracle log file sync等待事件优化浅析.pdf

    Oracle log file sync等待事件优化浅析.pdf

    ib_logfile0

    ib_logfile0ib_logfile0ib_logfile0

    Tanel_Poder_log_file_sync

    图文并茂,非常详细的介绍Log File Sync机制,对oracle调优很有帮助

    本人常用C++类 日志文件类 LogFile.rar

    标题中的"LogFile"指的是一个专用于处理日志的C++类,这个类可能包含了创建、写入和读取日志文件的功能。描述中提到,这是一个作者常用的类,他希望通过分享来引发讨论和获得反馈。 `LogFile.cpp`和`LogFile.h`是...

    arcgis9.3卸载license出现invalid install.log file状况的方法

    在本场景中,用户遇到了“invalid install.log file”的错误,这通常发生在尝试卸载ArcGIS 9.3时,系统无法正确读取或验证安装日志文件。这个错误可能阻碍了卸载过程的正常进行,因此需要采取一些特殊的步骤来解决。...

    USBTRACE LogFile Decoder V1.0.7.rar

    加密狗数据解码工具,支持龙脉NOX\NOX2\NOX5\NOX定制狗\DAM精简型\DAM2+网络狗、R2\R4SMART\R4ND、域天简单型\密码型\F2K\易用专业型、坚石ET99、精灵狗UGA、精锐E\精锐IV、磐石NT77\NT88\NT199、SuperPro\ULTRAPRO...

    Android代码-LogToFile

    LogToFile ↓支持一下 Android a simple and practical to print to local phone logs Log files open source The log file is written to the tools, the priority SD card -> external memory -> internal ...

    gis9.3卸载出现invalid install.log file状况的方法

    在本案例中,我们遇到的问题是尝试卸载GIS 9.3时遇到了“invalid install.log file”的错误。这通常意味着在卸载过程中,系统无法找到或读取必要的安装日志文件,导致卸载过程受阻。 为了解决这个问题,我们需要...

    ArcGis卸载出现invalid install.log file状况的方法

    两步,帮助大家很容易实现卸载... (1)下载压缩包并解压得到install.log文件 (2)找到License的默认安转路径,找到卸载工具unwise32.exe,双击打开,选择(1)步下载的install.log文件,并点击next,即可实现完全卸载

    my logfile c source code

    my logfile c source codemy logfile c source codemy logfile c source codemy logfile c source codemy logfile c source codemy logfile c source codemy logfile c source code

    数据库性能监控

    log file sync(ms) db file scattered read(ms) #IO WorkLoad Oracle IOPS Oracle MBPS db file sequential read db file scattered read log file parallel write log file sync physical reads physical writes ...

    Mysql启动中 InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes 的问题

    当遇到"InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes"这样的错误时,通常意味着InnoDB的日志文件大小与MySQL配置文件中设置的大小不匹配。 InnoDB的日志文件通常以`ib_logfile0`和...

    Usbtrace Logfile DecoderUsbtrace Logfile Decoder 2.06

    Usbtrace Logfile DecoderUsbtrace Logfile Decoder 2.0.6 版本,2024年11月14日更新,支持狗的类型增加了四种,解码方面也更简单,压缩包设置了密码,压缩包密码为123

    Memtester Logfile Sample

    Memtester Logfile Sample 4.3.0

    debug log file.log

    debug log file.log

    logfile.txt

    logfile

    LogToFile.h

    《LogToFile.h》是一个在IT开发中常用的辅助类工具,主要功能是将程序运行过程中的错误信息记录并保存到文本文件中。这个功能对于软件调试、日志分析以及问题排查至关重要。下面我们将深入探讨这个工具的工作原理、...

Global site tag (gtag.js) - Google Analytics