Oracle“日志文件同步”等待事件在用户会话发出提交(或回滚)时触发。用户会话将发出 LGWR 信号或将其发布到 LGWR,以将日志缓冲区写入重做日志文件。当 LGWR 完成写入后,它将发布用户会话。等待完全取决于LGWR写出必要的重做块并将其完成的确认发送回用户会话。等待时间包括日志缓冲区和 post 的写入,有时称为“提交延迟”。
<View:V$SESSION_WAIT> 中的 P1 参数定义如下:日志文件同步等待事件:
P1 = buffer# 必须将直到此缓冲区编号(在日志缓冲区中)的所有更改刷新到磁盘并确认写入操作,以确保事务已提交并将在实例崩溃时保持。等待的是 LGWR 刷新到此缓冲区 #。
减少甲骨文等待/等待时间
如果 SQL 语句遇到此事件的大量总时间,则应检查平均等待时间。如果平均等待时间较短,但等待次数较多,则应用程序可能在每行之后提交,而不是批处理 COMMIT。Oracle 应用程序可以通过在“n”行之后提交来减少这种等待时间,从而减少不同的 COMMIT 操作。必须确认每个提交,以确保相关的 REDO 位于磁盘上。尽管 Oracle 可以“搭载”提交,但通过批处理事务来减少提交总数是非常有益的。
如果 SQL 语句是 SELECT 语句,请查看 Oracle 审核设置。如果为 SELECT 语句启用了审核,则 Oracle 可能会花费时间将数据写入并提交到 AUDIT$ 表中。
如果平均等待时间很长,则检查会话的其他与日志相关的等待时间,以查看会话花费大部分时间的位置。如果会话继续等待同一缓冲区#,则V$SESSION_WAIT的SEQ#列应该每秒递增。如果不是,则本地会话存在等待事件超时问题。如果 SEQ# 列递增,则阻塞过程是 LGWR 进程。检查LGWR正在等待什么,因为它可能卡住了。
如果等待是由于 I/O 缓慢造成的,请尝试以下操作:
- 减少包含重做日志的磁盘上的其他 I/O 活动,或使用专用磁盘。
- 尝试减少资源争用。检查每秒从 V$SYSSTAT 获得的事务数(提交数 + 回滚数)。
- 交替重做不同磁盘上的日志,以最大程度地减少存档器对日志编写器的影响。
- 将重做日志移动到更快的磁盘或更快的 I/O 子系统(例如,从 RAID 5 切换到 RAID 1)。
- 请考虑使用原始设备(或磁盘供应商提供的模拟原始设备)来加快写入速度。
- 查看是否可以使用NOLOGGING /不可恢复选项安全地完成任何活动,以减少正在写入的重做量。
- 查看是否有任何处理可以使用“提交NOWAIT”选项(在使用之前,请务必了解其语义)。
- 检查日志缓冲区的大小,因为它可能非常大,以至于 LGWR 一次写入了太多块。
日志文件同步等待事件:其他注意事项
如果Oracle“日志文件同步”等待对整个系统很重要,则LGWR能够足够快地刷新重做可能存在问题。“日志文件同步”的总体等待时间可以分解为几个组成部分。如果在完成上述常规调整提示后,系统仍然显示较高的“日志文件同步”等待时间,请将 Oracle 总等待时间分解为各个组件。然后,调整那些占用最多时间的组件。
“日志文件同步”等待事件可能细分为以下组件:
1. 如果空闲
,则唤醒 LGWR 2.LGWR 收集要编写的重做并发出 I/O
3。等待日志写入 I/O 完成
的时间 4.LGWR 输入/输出后处理
5.LGWR 发布前台/用户会话,表示写入已完成
6.前台/用户会话唤醒
根据等待时间最长的“日志文件同步”组件调整系统。步骤 2 和 3 累积在“重做写入时间”统计信息中。(即在统计包的统计部分下找到的)步骤 3 是“日志文件并行写入”等待事件。(请参阅元链接注释 34583.1:“日志文件并行写入”)随着系统负载的增加,步骤 5 和 6 可能会变得非常重要。这是因为即使在发布前台之后,操作系统也可能需要一些时间来安排它运行。
数据卫士注释
如果使用具有同步传输和提交 WAIT 默认值的数据卫士,则上述优化步骤仍将适用。但是,步骤 3 还将包括网络写入时间和对备用重做日志的重做写入。MAA OTN 白皮书 ( 注意 387174.1:MAA – 数据卫士重做传输和网络最佳实践) 中详细介绍了“日志文件同步”等待事件及其如何应用于数据卫士。
最后的思考
当用户会话等待“日志文件同步”事件时,它实际上是在等待 LGWR 进程将日志缓冲区写入重做日志文件并向其返回确认/控制。如果总等待时间很长,请查看平均等待时间。如果平均等待时间较短,但等待次数较多,请通过批处理(或在“n”之后提交)行来减少提交次数。
如果 I/O 速度较慢,请调查以下事项:
- 减少现有磁盘上的争用。
- 将日志文件放在速度更快的磁盘上。
- 将备用重做日志放在不同的磁盘上,以最大程度地减少存档过程(日志文件切换)的影响。
- 查看应用程序设计,在适当的情况下使用 NOLOGGING 操作,并避免更改超出要求的数据。
如果等待时间仍然很长,请查看“日志文件同步”的每个组件并单独进行调整。
参考至:https://logicalread.com/oracle-log-file-sync-wait-event-dr01/