【DBA攻坚指南:左手Oracle,右手MySQL-学习总结】

张开发
2026/4/18 6:06:34 15 分钟阅读

分享文章

【DBA攻坚指南:左手Oracle,右手MySQL-学习总结】
处理log file sync等待事件首先明确什么是log file sync等待事件从用户提交会话开始LGWR进程将redo缓存中的信息写入redo日志文件后LGWR进程通知用户写操作完成到用户会话接受到LGWR进程通知为止这整个过程就是可能出现log file sync等待事件的地方。在LGWR写入日志过程中还包括了控制文件修改操作对于RAC节点可能还存在节点之间的scn同步、节点之间cr块的同步。引起log file sync等待事件的原因1、事务提交数量过多导致LGWR进程的任务变多任务变多就可能产生资源的竞争包括cpu、io、内存等的竞争自然的LGWR速度就变慢产生了log file sync等待事件。2、存储io资源紧张使得LGWR在进行物理写的时候速度变慢。3、cpu资源紧张导致LGWR获取不到cpu。4、对于RAC架构数据库为了实现不同节点数据一致性需要将commit SCN同步到其他节点上有两种同步方式1)一个节点上的SCN不立即同步到其他节点可以理解为异步SCN。2BOC方式一个节点的SCN需要通过本地实例的LMS进程将SCN同步到远程实例的LMS进程等待远程实例的LMS进程通知本地LMS同步完成后再由本地LMS进程通知LGWR进程所有节点的SCN已经同步完成。这一步骤包含在了LGWR进程写入日志的过程中如果SCN同步速度较慢消耗时间较长就会导致LGWR进程通知用户会话提交完的时间变长也就是造成了log file sync等待事件。5、RAC架构数据库节点1提交事务之后需要在本地实例上完成LGWR写入日志后才能由LMS进程将cr块传递到其他节点上。节点2要读取这个block时需要从有这个block的节点把cr块传递过来节点2等待节点1传递的cr块的时间较长时就会发生gc cr block busy。如果节点2在等待节点1传递某个block的过程中节点2上又有其他的会话需要读取这个block就会在节点2上发生gc buffer busy acquire。6、控制文件争用。7、提交方式解决log file sync等待事件从awr报告的Top 10 Foreground Events by Total Wait Time中发现log file sync等待事件后就可以根据上面列出的引起log file sync等待事件的原因进行排查。1、针对事务提交数量过多检查故障时间段awr报告中Key Instance Activity Stats部分的user commits对比非故障时间段的数值是否有一个大的变化再对比下每秒的redo size大小是否有变化确定是由于事务提交过多导致那么就可以接着分析为什么事务提交数量会变多、近期有做过什么变更、应用端在故障时间段是否有跑批之类的业务、insert和update语句是row by row还是批量执行。2、针对存储io资源紧张问题首先检查故障时间段操作系统io的繁忙程度具体到每块盘的io使用率通过如下命令SQL select event, wait_time_milli,wait_count from v$event_histogram where event log file parallel write;检查log file parallel write等待事件和log file sync等待事件的时间差如果log file parallel write等待事件时间和log file sync时间相差不大说明就是数据库在进行物理块读写时速度慢。经过前面的检查确认是存储io问题之后需要进一步排查物理盘是否有损坏、是否可以将不同表空间放置在不同盘上比如将data、archive log、redo、ocr分别放置在不同的盘上尽量避免高峰期时io资源的争抢考虑是否是同一个集群上其他数据库io占据存储带宽导致该数据库获取不到io。3、针对数据库获取不到cpu的情况首先从awr报告Load Profile部分检查DB CPU占据DB Time的比重再检查操作系统在故障时间段cpu使用率可以确定数据库是否出现cpu资源争抢。但出现cpu资源争抢可能只是表象还有更深层次的原因比如说并发连接数量冲高导致cpu竞争、批量中是否有通过row by row 的dml语句等。

更多文章