AWR报告中log file sync等待事件占比高(如超15%)且平均等待超5ms、log file parallel write同步升高,表明事务提交慢导致卡顿,根源是LGWR写磁盘被卡住,而非SQL执行慢。

AWR报告里log file sync等待事件占比高,基本可以断定是事务提交慢导致的卡顿,不是SQL本身慢,而是每次COMMIT都在排队等LGWR写磁盘。
怎么看出来是log file sync在拖后腿
打开AWR报告,直接翻到“Top 5 Timed Events”部分。如果log file sync排在前三,且占DB Time比例超过15%,同时log file parallel write也同步升高(说明LGWR写得慢),这就是典型症状。注意别和log file switch (checkpoint incomplete)混淆——后者是日志切得太勤,前者是单次提交太慢。
-
log file sync平均等待时间(Avg wait ms)超过5ms就值得警惕,超过10ms通常已影响业务响应 - 对比正常时段报告:相同并发量下,等待次数翻倍或平均等待时间增长2倍以上,基本可确认问题
- 检查
Redo size per second是否异常升高——写得多不等于有问题,但写得多+等待高=配置或IO瓶颈
为什么log file sync会高
根本原因是LGWR把redo从内存刷到磁盘花了太久。常见原因不是LGWR本身懒,而是它被卡住了:
- redo日志文件放在慢盘上(比如单块SATA盘、NAS存储),尤其没做RAID 10
-
LOG_BUFFER设得过大(比如>200MB),LGWR触发条件(_LOG_IO_SIZE)没达到,只能靠3秒超时唤醒,积压多、一次写入量大 - 频繁小事务:应用每条DML都
COMMIT,而不是批量提交,导致LGWR被反复唤醒但每次只写一点点 - CPU资源争抢严重:LGWR进程调度延迟,或者RAC私网延迟高,影响LGWR通知前台的效率
怎么快速验证和调优
先不动参数,用几个简单命令确认瓶颈点:
- 查当前redo日志位置和IO性能:
SELECT member, bytes FROM v$logfile JOIN v$log USING(group#);看路径是否在高速存储上 - 看LGWR最近写入延迟:
SELECT event, time_waited_micro/1000 as ms, wait_count FROM v$system_event WHERE event = 'log file parallel write';如果平均单次写入耗时>10ms,IO是主因 - 查事务提交频率:
SELECT value FROM v$sysstat WHERE name = 'user commits';结合AWR里Executes per Second估算平均每秒多少次COMMIT - 临时调小
_LOG_IO_SIZE(比如从512KB降到128KB),强制LGWR更频繁但更轻量地刷日志,观察log file sync是否下降
真正生效的改动往往是组合动作:换更快的redo盘 + 应用层合并事务 + 调整_LOG_IO_SIZE。单独改一个参数容易治标不治本。


















