完全揭秘log file sync等待事件

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 什么是log file sync等待事件呢?在一个提交(commit)十分频繁的数据库中,一般会出现log file sync等待事件,当这个等待事件出现在top5中,这个时侯我们需要针对log file sync等待事件进行优化,一定要尽快分析并解决问题,否则当log file sync等待时间从几毫秒直接到20几毫秒可能导致系统性能急剧下降,甚至会导致短暂的挂起。

这里先引用一下tanel poder大师的图:
image.png
我们一起来看下面几个关于log file sync等待事件的问题,欢迎大家一起来揭秘,相互学习,共同进步,彻底搞懂redo的机制。。。

讨论主题:
1、log file sync的原凶到底是什么?
2、log file sync平均等待事件时间到7毫秒算正常情况?评估log file sync等待事件的指标是什么?
3、log file sync等待事件与log file parallel write等待事件之间有什么关系?(下面的图来自于awr报告中的等待事件,有没有发现什么?)
image.png

4、log file sync等待会导致buffer busy waits等待吗?
5、在实际的项目中碰到了大量的log file sync等待事件,如何优化呢?

yixin0358
1、log file sync的原凶到底是什么?
频繁commit/rollback或磁盘I/O有问题,大量物理读写争用

westzq1984
2、log file sync平均等待事件时间到7毫秒算正常情况?评估log file sync等待事件的指标是什么?
对于OLTP,还算正常。但是对于批量处理,有点慢
指标是平均等待时间,以及AWR后续的Wait Event Histogram

vage
3、log file sync等待事件与log file parallel write等待事件之间有什么关系?(下面的图来自于awr报告中的等待事件,有没
有发现什么?)
log file sync和log file parallel write相差很大,但CPU使用率也不高,这种情况比较少见,这就属于疑难杂症范畴了。I/O也
很快,CPU也充足,log fie parallel write响应时间很短,但log file sync响应时间确很大。这是最难定位的情况,可以全面对
比下Redo相关资料(v$sysstat中的资料)、Redo相关Latch的变化情况。
比如,redo synch time的平均响应时间,不是每次redo synch time都有提交,但每次提交必有redo synch time。如果redo
synch time向应快,而log file sync慢,则说明Lgwr和进程的互相通知阶段出了问题。还有redo entries,这个Redo条目数,真
正含意是进程向Log Buffer中写Redo的次数。redo log space wait time、redo log space requests资料和Log Buffer Space等
待事件也要关注下。Log Buffer的大小通常不会影响Log File Sync,但通过Log Buffer的变化,可以了解Redo量的变化。
关于Log Buffer对Log File Sync的影响,
在新IMU机制下,Redo数据先在共享池中,提交时传到Log Buffer中,如果这时有等待,等待时间是Log Buffer Space。从Log
Buffer到磁盘,等待事件才是log file sync。
老机制下也一样,Log Buffer之前的等待是log buffer space,log buffer之后的等待才是log file sync。

mlx_861201
4、log file sync等待会导致buffer busy waits等待吗?
我觉得还是有可能的,我假设一种情况,一个大事务commit,采用的是延迟提交,一个进程要读取延迟提交的块,需要修改数据
块事务槽提交和锁定状态,数据行的锁定状态,这个过程需要产生redo日志,假设此时log file sync 等待,同时另一个进程读取
同一个数据块,就产生了buffer busy waits等待事件,所以log file sync等待会导致buffer busy waits。
该解答未进过实验验证,只是一个假设,不是真理。

白鳝
一、log file sync平均等待事件时间超过7ms,如果等待时间过长,说明log write每次写入的时间过长,如果能够优化redo日志文件存储,使之存放在更快的磁盘上,就可以减少这个等待事件的单次等待时间。(RAID 5--> RAID 10)
 当无法通过优化redo日志的I/O性能来解决问题,或者优化了redo日志的I/O性能后还是无法达到我们的预期,那么该如何处理呢?
二、 有经验的DBA可能会建议加大日志缓冲区(log buffer)。提到加大日志缓冲区,可能有些朋友就会感到疑惑,redo日志文件写等待时间长怎么会和日志缓存冲区直接关联起来呢?实际上这个问题解释起来一点也不难,如果数据文件的I/O性能有问题,平均单块读的等待时间偏长,那么通过加大db cache来减少I/O总次数,从而达到优化I/O的效果。加大日志缓存区的原理也是一样的,这样可以使

日志缓存中的存储更多的redo日志数据,从而减少由于redo日志缓存区不足而产生lgwr写操作的数量,使平均每次写入redo日志文件

  的redo字节数增加,从而减少redo的I/O次数,进而达到优化log file sync等待事件的目的。
三、如果上述两种方法都不行时,还有一种方法:就是减少提交的次数。如果提交过于频繁,那么无论怎么优化都无法彻底解决问题。
 通过加大一次提交记录的数量,减少提交批次,可以有效地减少log file sync等待时间。采用此方法就意味着需要对应进行较大的调整,甚至要对应用架构做出修改,这种修改的代价将十分巨大。
四、还有一个方案可以优化log file sync事件,就是把部分经常提交的事务设置为异步提交。
  异步提交是10g版本引入的新特性,通过设置commit_write参数,可以控制异步提交。
  commit_write参数默认值是“immediate,wait”

可以设置为“immediate,nowait”来实现异步提交。
采用异步提交的系统需要做一些额外的校验和处理,清理不一致的数据,重新插入刚才由于异步提交而丢失的数据。这就需要在应用层面进行一些特殊处理,建校验机制和错误数据处理机制。我们需要在应用层面进行一些特殊的设置。应该注意的是,那些特别重要的,后续无法重新完全补充的数据不适合使用这种方法

  log file sync等待事件是十分关键的,我们在数据库的日常维护中应该对此指标建立基线,如果这个指标有异常变化,一定要尽快分析并解决问题。一旦这个指标恶化,可能导致系统性能急剧下降,甚至会导致短暂的挂起。去年,一个客户的系统,平时log file sync的指标是2-3ms。在一次巡检时老白发现该指标增长到了7ms, 当时巡检报告中建议客户关注这个指标,并尽快检查存储系统和操作系统,查出变慢的原因。客户检查了存储,没发现故障,于是就不了了之了。在下个月巡检的时候,发现该指标增长到了13ms,再次预警,依然没有发现问题。随后两个月这个指标一直持续恶化,增长到了20多毫秒。由于前面几个月的检查工作没有发现问题,而目前系统也还是很正常的,所以客户也没有再去认真核查。终于有一天,系统突然挂起,5分钟后才恢复正常。后来检查原因,就是log file sync等待导致。根据我的建议,客户从头到尾检查了一遍,最终发现LVM的一条链路存存闪断现象,修复了链路后,一切都恢复正常了。
通过上面的案例,我们要吸取教训,如果log file sync指标有所恶化,一定要尽快排查问题的根源,如果log file sync的等待时间持续上升,那么系统出现挂起的可能性也在增加。尽快找到问题的原因是势在必行的。

5、最后我总结了大家对log file sync等待事件的优化方案:
(1)优化了redo日志的I/O性能,尽量使用快速磁盘,不要把redo log file存放在raid 5的磁盘上;
(2)加大日志缓冲区(log buffer);
(3)使用批量提交,减少提交的次数;
(4)部分经常提交的事务设置为异步提交;
(5)适当使用NOLOGGING/UNRECOVERABLE等选项;
(6)采用专用网络,正确设置网络UDP buffer参数;
(7)安装最新版本数据库避免bug,具体bug修复的版本参考文档;

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
Kubernetes Perl 容器
K8s查看集群 状态事件描述以及Pod日志信息
K8s查看集群 状态事件描述以及Pod日志信息
241 3
|
6月前
|
小程序
【小程序】报错:no such file or directory, access ‘wxfile://usr/miniprogramLog/log2‘
【小程序】报错:no such file or directory, access ‘wxfile://usr/miniprogramLog/log2‘
1293 0
|
3月前
|
安全 网络安全 数据安全/隐私保护
auth required pam_tally2.so file=/var/log/tallylog onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=300 什么作用?
【8月更文挑战第2天】auth required pam_tally2.so file=/var/log/tallylog onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=300 什么作用?
51 1
|
3月前
|
安全 网络安全 数据安全/隐私保护
auth required pam_tally2.so file=/var/log/tallylog onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=300 什么作用
【8月更文挑战第14天】auth required pam_tally2.so file=/var/log/tallylog onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=300 什么作用
88 0
|
4月前
|
关系型数据库 MySQL 数据库
MySQL 启动日志报错: File /mysql-bin.index not found (Errcode: 13 - Permission denied)
MySQL 启动日志报错: File /mysql-bin.index not found (Errcode: 13 - Permission denied)
223 2
|
6月前
|
存储 关系型数据库 数据库
关系型数据库文件方式存储LOG FILE(日志文件)
【5月更文挑战第11天】关系型数据库文件方式存储LOG FILE(日志文件)
194 1
|
6月前
|
存储 SQL Serverless
Serverless 应用引擎常见问题之应用下的【应用事件】以及企业级特性下的【事件中心】没有日志如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
120 0
|
6月前
|
运维 应用服务中间件 网络安全
利于群晖的File Station+SFTP实现第三方人员快速获取服务器应用日志
利于群晖的File Station+SFTP实现第三方人员快速获取服务器应用日志
221 0
|
6月前
|
存储 JSON 运维
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
159 0
|
11天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
116 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板