当用户(前台进程)对事务进行提交或回滚操作时,oracle需要将涉及该事务的所有redo条目信息全部写入到red logfile中。前台进程会通知lgwr将redo log buffer中的重做日志条目写出到redo logfile中。在11.2.0.3之前,lgwr会在写入完成后通知前台进程,用户进程会一直等待,直到获取到lgwr通知信息,保证所有的redo信息已全部安全的写入磁盘。在11.2.0.3及以后,默认情况下,lgwr写日志完成时不再主动的通知前台用户进程,由前台进程按时间间隔轮询查询日志的写入情况。前台进程在等待写入通知消息前,在数据库中可能会看到log file parallel write、log file sync等待事件。
专注于为中小企业提供成都网站建设、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业江岸免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了超过千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。由以上过程可知,Log file sync等待事件可能由以下原因引起:
1. Commit
2. Rollback
3. DDL操作
4. 数据字典更新(seq获取)
oracle的建议log file sync等待事件的平均等待时间要保持在20ms以内。通常,该等待事件的平均等待时间一般在5ms以下。10ms也不一定有问题,需要看整体的系统运行情况。
通常出现log file sync事件可从以下几个方面进行调整:
1. Redo log不要放在raid5上
2. 将小而短的事务进行合并,批量执行(减少commit)
3. 使用COMMIT NOWAIT选项(10.2提供,异步提交,可能导致日志丢失)
4. 使用NOLOGGING / UNRECOVERABLE选项
5. 保证log切换时间间隔在15-20分钟
log file sync的整个过程可以细分为以下几个阶段:
1) 用户提交
2) 通知LGWR写日志,LGWR唤醒
3) LGWR收集redo信息写I/O
4) LGWR写完成
5) LGWR通知前台进程
6) 前台进行收到通知,唤醒
第2步及第3步的写入时间可以参考awr中Instance Activity Stats-redo write time部分。第3步会伴随log file parallel write等待事件。系统负载较高时,第5步及第6步可能会产生延时。
整个过程可能使用下图(tanel poder大师的图)来表示:
有关log file sync讨论:
完全揭秘log file sync等待事件:http://www.itpub.net/thread-1777234-1-1.html
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。