log file sync高不等于磁盘慢,真正原因常是lgwr被阻塞:如等待enq: cf/us争用、_log_io_size过小致小io激增、arch滞后或log_buffer过小;db cpu远低于db time且提交变慢时,大概率lgwr假死,需结合ash、v$sysstat及redo write指标交叉验证。

AWR本身不直接暴露LGWR、DBWn等后台进程的CPU或IO瓶颈,必须通过间接指标交叉定位——重点看log file sync等待、write complete waits、DB CPU与DB Time的偏离度,再下钻到ASH确认是否由写阻塞引发会话级排队。
为什么log file sync高不等于磁盘慢
log file sync等待时间长,常被第一反应归为“磁盘写太慢”,但AWR里log file sync平均等待超过10ms时,真正原因更可能是:LGWR被阻塞,而非磁盘响应慢。常见阻塞源包括:
-
LGWR等待log file parallel write完成,而后者又卡在enq: CF - contention(控制文件更新锁)或enq: US - contention(undo segment争用) -
LGWR因_log_io_size参数过小,频繁触发小IO合并失败,导致系统调用开销激增 - redo log文件所在磁盘存在
direct path write抖动(查DBA_HIST_SYSTEM_EVENT中该事件的TIME_WAITED突增) - 归档模式下
ARCH进程滞后,LGWR被迫等待arch log not available(查V$ARCHIVE_DEST_STATUS的STATUS和ERROR列)
DB CPU远低于DB Time时,后台写可能正在“假死”
当AWR报告中DB CPU仅占DB Time的15%以下,但用户普遍反馈提交变慢、事务延迟上升,说明前台会话大量卡在等待log file sync,而CPU空闲——这恰恰是LGWR无法及时刷日志的典型信号。此时需验证:
- 对比
DBA_HIST_SYSMETRIC_SUMMARY中Log Writer Response Time和Redo Writes Per Sec:若前者飙升而后者骤降,LGWR已进入低效循环 - 检查
V$SYSSTAT中redo write time与redo writes比值:正常应50ms且redo blocks written未同步增长,说明写路径异常 - 确认
LOG_BUFFER是否过小:若redo log space requests每秒>0.1次,LGWR被迫频繁唤醒,易引发调度抖动
用ASH确认写阻塞是否引发会话级排队
AWR只给聚合结果,瞬时写卡顿必须靠V$ACTIVE_SESSION_HISTORY定位。执行以下查询,可识别是否因LGWR延迟导致前台会话批量挂起:
SELECT sql_id, event, COUNT(*) samples
FROM v$active_session_history
WHERE sample_time > SYSDATE - 1/1440 -- 最近1分钟
AND session_state = 'WAITING'
AND event IN ('log file sync', 'log file parallel write', 'enq: CF - contention')
GROUP BY sql_id, event
ORDER BY samples DESC;
若出现多个不同sql_id同时等待log file sync,且log file parallel write样本数极少,基本锁定LGWR自身卡住(如陷入内核态IO重试或被其他进程抢占);若enq: CF - contention样本密集,则问题在控制文件更新锁竞争,与磁盘无关。
DBWn写压力需结合Buffer Pool和Checkpoint推进速度判断
DBWn瓶颈不会直接表现为高等待事件,而是通过free buffer waits、write complete waits或buffer busy waits间接暴露。关键判断点:
-
write complete waits持续>0.01%(查DBA_HIST_SYSTEM_EVENT),说明DBWn写不过来,前台进程在db file sequential/scattered read前被迫等待块被写出 - 对比
DBA_HIST_BUFFER_POOL_STATISTICS中physical reads与db block changes比值:若该比值在问题时段陡升,说明脏块积压导致缓存命中率下降,DBWn写入节奏被打乱 - 检查
V$INSTANCE_RECOVERY中estimated_mttr是否远超target_mttr:若MTTR目标长期无法达成,DBWn写压力已被checkpoint机制放大,此时调大FAST_START_MTTR_TARGET反而可能加剧抖动
后台写进程的瓶颈从来不在单个进程的CPU或IO使用率,而在它与其他进程(LGWR、CKPT、ARCn)及底层存储的协同节奏。AWR里任何单一指标都不可信,必须用log file sync等待为起点,用DB Time与DB CPU的偏离度定性,再用V$ACTIVE_SESSION_HISTORY抓取真实排队链路——漏掉任一环,都会把写瓶颈误判成磁盘或SQL问题。











