log file sync等待飙升主因是提交风暴或同步链路异常而非磁盘故障;需重点监控每秒提交次数、wait for scn ack、日志切换频率、io响应及归档状态,五维横向比对缺一不可。
log file sync等待时间突然飙升,90%以上不是磁盘坏了,而是某处“提交节奏”或“同步链路”被意外打乱——比如应用加了新功能开始每行都commit、rac节点间scn广播卡住、或者归档没跟上导致日志切换风暴。
查 user commits 每秒速率是否跳变
平均等待时间(比如8ms)毫无意义,真正要盯的是提交频次。AWR里看到log file sync总等待暴涨,第一件事就是跑这句:
SELECT ROUND(SUM(CASE WHEN NAME = 'user commits' THEN VALUE END) / 3600, 2) AS commits_per_sec FROM v$sysstat WHERE NAME IN ('user commits','user rollbacks');
结果对比故障前后:
- 从 12/s 跳到 187/s?基本锁定为提交风暴,和存储无关
- 同时看
user calls / (user commits + user rollbacks),若 - 注意:序列
NEXTVAL设为NOCACHE也会偷偷触发大量递归commit,别漏查
比对 log file parallel write 和 log file sync 的平均毫秒值
两者时间接近(比如都是9–12ms),才说明LGWR真被IO拖住了;否则问题不在磁盘,在别处:
- 如果
log file sync是 250ms,而log file parallel write只有 1ms → IO没问题,是CPU调度、Latch争用或RAC的SCN同步卡了 - 查直方图确认延迟分布:
SELECT wait_time_milli, wait_count FROM v$event_histogram WHERE event = 'log file parallel write' AND wait_time_milli IN (1,2,4,8,16,32);,若16ms及以上档位占总量30%+,LGWR已明显卡顿 - Linux下用
iostat -x 1 5验证:%util > 90%、await> 15ms、svctm异常升高才是IO瓶颈证据
RAC环境下重点抓 wait for scn ack
Oracle 19c RAC中,log file sync飙升常伴随wait for scn ack等待事件——这不是IO问题,是LMS进程在跨节点同步SCN时被阻塞:
- 查
v$system_event里wait for scn ack是否突增;再查v$sysstat中redo write broadcast ack time统计值是否同步飙升 - LMS trace文件里若持续出现
broadcast time异常高,大概率是某节点网络延迟、心跳不稳或LMS进程被CPU抢占 - 非紧急场景下,可临时禁用自适应日志同步:
ALTER SYSTEM SET "_adaptive_log_file_sync"=FALSE SCOPE=BOTH;,但需评估对RAC一致性的影响
检查日志切换频率和归档是否跟得上
AWR里Log switches (derived)显示每小时切9.95次?约6分钟一次,远超推荐的15–20分钟——这是日志文件太小的铁证:
- 单个redo log文件建议≥1GB(OLTP常见2–4GB),组数至少4组,避免归档未完成就forced log switch
- 别把redo放RAID 5上:小块顺序写在RAID 5下会转成随机大写,I/O效率归零;改用RAID 10或NVMe直连盘
- 归档目标路径空间不足、归档进程
ARCH卡住、或log_archive_dest_n配置了低效传输方式(如ASYNC但网络抖动),都会让LGWR等归档完成才能重用日志
最容易被忽略的点:log file sync不是单一瓶颈,而是前台、LGWR、LMS、IO子系统、甚至OS信号量调度共同参与的一条链。任一环节轻微劣化,在高并发下都会被指数级放大。所以排查不能只盯一个指标,必须横向比对commits_per_sec、log file parallel write直方图、wait for scn ack、iostat和归档状态这五块数据,缺一不可。











