暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Log File Sync等待事件

DB小榴莲 2018-11-22
2356

一 什么是logfile sync等待事件

 

当某一个会话提交事务,ORACLE会把redo buffer中记录的关于该会话的变更刷新到日志文件。从会话请求写日志到LGWR将日志写入磁盘并告知用户(session)的这段时间即log file sync等待时间。也有另外一种说法,log file sync等待时间是从服务器进程下达提交命令后,一直等待到LGWR成功写完为止。后者省略了LGWR写完日志回头通知服务器进程这段时间。


MOS文档中对该等待时间的描述包括LGWR写完日志回头通知服务器进程这段时间,如下

                           


二 产生logfile sync等待事件的5个原因(不限)

 

2.1、 IO系统缓慢


通过以下两种方法可以明确是否为IO问题


  • log file sync消耗在log file parallel write上的时间

 

服务器进程发出指令让LGWR写日志,那么服务器进程就在等待log file sync,如果此时IO系统缓慢,LGWR也会发生等待,即log file parallel write。


通过AWR报告可以看到logfile parallel write等待时间和log file sync等待时间,如果log file sync的时间消耗在log file parallelwrite上的比例很高,说明大部分的等待时间用在IO上,LGWR在等待redo写入。应该检查 LGWR 在IO 方面的性能。作为一个经验法则,log file parallel write平均时间超过20毫秒, 意味着IO子系统有问题。



如果log file sync等待很高,但是log file parallel write处于正常的范围内,也就是说logfile sync的时间消耗在log file parallel write上的比例不是很高,是不是能说明IO系统正常呢?当然不是。因为log file parallel write是一个平均值,在收集信息的快照点之间(短时间内),谁也不能保证IO不会出现性能问题。通常这是间歇性IO缓慢,可以通过iostat报告查看对应时间点的IO情况。

 

建议及改善方法


  • 不要把重做日志放在RAID 5(RAID5的读出效率很高,写入效率一般)。


  • 不要把重做日志放在 Solid State Disk (SSD),SSD写入性能不错,但是会遇到写峰值,从而导致大量log file sync等待。


  • 监控其他可能需要写到相同路径的进程,确保磁盘具有足够的带宽。如果不能满足就移动这些进程或redo。


  • LOG_BUFFER不要太大,刷新一个过大的log_buffer需要很长的等待时间。当缓冲区被写满,它必须将所有数据写入到重做日志文件。LGWR 将一直等待,直到最后的 I/O完成。

 


  • 检查LGWR跟踪文件

 

通过查看LGWR的trace文件来检查IO系统是否正常。从10.2.0.4开始,超过500毫秒的写操作都将被ORACLE记录在LGWR进程的跟踪文件里,文档 ID 601316.1中有描述



当LGWR跟踪文件中记录如下信息时,说明IO系统已经出现问题,当然没有记录类似信息也不能说明IO系统没有问题,因为阀值500毫秒很高。



如果日志记录时间间隔很长,则不会影响log file parallel wait,但是有大量的会话等待log file parallel wait,那么log file parallel wait等待时间乘以会话数就会导致log file sync总等待时间很长。可以Truss Lgwr来检查时间消耗在哪里。

 

2.2、日志组过小

 

每次日志写满便会切换到下一个日志组,日志组切换便会触发log file sync。如果日志组太小,那么日志组的切换频率就会很高,导致log file sync等待次数增多。


ORACLE建议15~20分钟切换一次日志组,如果实际环境中日志切换间隔远小于建议值,则需要增大redo log。

 

2.3、提交过于频繁

 

用户提交事务意味着触发LGWR进程的写操作,必然会产生log file sync,大量会话频繁的commit会导致log file sync增多。在AWR报告里,通常看到log file sync平均等待时间很低,而等待次数很高,这就表示用户在频繁的commit。


建议及改善方法


  • 使用组提交的方式


  • 使用NOLOGGING/UNRECOVERABLE


  • 使用COMMIT NOWAIT

 


2.4、重做缓冲区(Redo Log Buffer)过大

 

如果Redo Log Buffer过大,LGWR写的次数会减少,单次写入时间会很长,那么log file sync等待时间就会很长。

 


2.5、操作中存在多余的重做数据

 

如果在用户操作中存在大事务,需要写入的重做数据量将会很大,那么log file sync等待时间就会增加,对应的LGWR进程等待logfile parallel write的时间就会增加。如果尝试减少用户操作生成的重做数据,会有效降低log file sync等待。

 

ORACLE提供了创建最小化重做数据的方法


  • 使用NOLOGGING,特别适用于LOB数据较大的场景


  • 临时操作时,使用临时表

 

 

 


最后修改时间:2020-01-04 19:39:29
文章转载自DB小榴莲,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论