最直接判断依据是AWR中log file sync与log file parallel write是否同步升高;若前者>40ms、后者>35ms,说明LGWR物理写入异常;若前者高而后者仅约5ms,则问题在SCN广播或调度延迟。

看AWR里log file sync和log file parallel write是否同步升高
这是最直接的判断依据。如果log file sync平均等待飙升到 40ms 以上,而log file parallel write也同步升到 35ms+,说明问题大概率出在 LGWR 的物理写入环节,而不是前台调度或 SCN 同步等中间环节。
注意两个值要对比看:若log file sync高但log file parallel write始终 5ms,说明 LGWR 写完后通知前台有延迟,可能涉及 RAC 的 SCN 广播、post/wait 调度或 latch 争用。
- 查 AWR 报告中 “Top 5 Timed Foreground Events” 和 “Background Wait Events” 两节,必须同时打开两个时间段(异常期 vs 基线期)横向比对
- RAC 环境下,务必分实例查看——常出现仅一个节点异常,比如实例 2 的
log file sync是实例 1 的 8 倍 - 避免只看“总等待时间”,重点盯“Avg wait (ms)”列,它反映单次提交的真实延迟
检查DB CPU与DB Time偏离度是否严重
当log file sync高但DB CPU仅占DB Time的 15% 以下,基本可排除 CPU 过载,反而指向 LGWR “假死”:它被卡住无法推进写流程,但又不消耗 CPU。
这种状态常见于 LGWR 正在等enq: CF - contention(控制文件更新锁)或enq: US - contention(undo segment 争用),也可能因_log_io_size过小导致频繁小 IO 合并失败,陷入系统调用抖动。
- 在 AWR 的 “Instance Efficiency Percentages” 部分确认
DB CPU/DB Time比值 - 若比值异常低,立即下钻到 “Wait Event Histogram” 查是否有大量 log file sync堆积——这是典型调度卡顿特征
- 配合
V$SYSSTAT查redo write time/redo writes比值:若 >50ms 且redo blocks written未同步增长,说明写路径已失效
确认是否为RAC环境下的wait for scn ack
Oracle 19c RAC 中,log file sync高常混杂wait for scn ack开销。这不是磁盘问题,而是 LGWR 在 commit 后需广播 SCN 给其他节点,并等待所有 LMS 进程返回 ACK。一旦某节点 LMS 延迟(如网络抖动、本地负载高),整个集群的提交都会被拖慢。
该现象在 AWR 中表现为:log file sync等待时间波动剧烈、与归档/备份无关、且redo write broadcast ack time统计值突增(需查DBA_HIST_SYSMETRIC_SUMMARY)。
- 运行 SQL:
SELECT metric_name, value FROM dba_hist_sysmetric_summary WHERE metric_name = 'Redo Write Broadcast Ack Time' AND snap_id BETWEEN &start_snap AND &end_snap; - 检查
V$ARCHIVE_DEST_STATUS中STATUS是否为VALID、ERROR是否为空——排除 ARCH 滞后连带阻塞 LGWR - 不要只盯着 LGWR trace,LMS trace(如
lms0_*.trc)里broadcast time异常才是关键线索
验证LOG_BUFFER和归档配置是否合理
LOG_BUFFER过小会迫使 LGWR 频繁唤醒,引发调度抖动;归档滞后则让 LGWR 在日志切换时被迫等待arch log not available,间接拉长log file sync。
这两类问题不会让log file parallel write变慢,但会让 LGWR 整体吞吐下降,尤其在批量提交场景下放大效应明显。
- 查
V$SYSSTAT中redo log space requests:若每秒 >0.1 次,说明LOG_BUFFER很可能不足 - 查 AWR “Redo Stats” 小节:
Log switches (derived)若每小时 >4 次,且redo size偏低,说明日志组太小或LOG_BUFFER太小导致频繁刷写 - 归档模式下,确认
V$ARCHIVE_DEST_STATUS的TRANSMIT_MODE为ASYNC而非SYNC,避免主库被备库拖慢
实际排查中,最容易被忽略的是 RAC 场景下wait for scn ack与log file sync的耦合性——它不体现为磁盘 IO 延迟,却能让单次 COMMIT 从 1ms 拉长到 5s,且 AW R 里没有独立等待事件暴露这个瓶颈。











