AWR中log file switch等待事件需定位具体子类型,若log file switch (checkpoint incomplete)单次平均等待超10秒,说明DBWR写不过来、检查点严重滞后;每小时日志切换超12次(即≤5分钟一次)或24小时内超180次,表明日志组总容量不足,结合Redo size/s估算最小安全容量(如1.09 MB/s需≥2GB),且必须配置至少4组、每组≥500MB,并确保旧组全为INACTIVE后方可删除。

log file switch 等待不是参数能调出来的,核心是日志组容量、数量与IO吞吐不匹配——AWR只是帮你确认这点,不是用来“调”的。
怎么看AWR里log file switch的真问题
AWR报告中「Top 5 Timed Foreground Events」里的log file switch条目是混合统计,不能直接下结论。必须定位到具体子类型:
- 查「Global Cache and Enqueue Statistics」节(单实例也存在该节),找明确标注为
log file switch (checkpoint incomplete)或log file switch (archiving needed)的行 - 在
dba_hist_system_event中过滤:SELECT event, time_waited_micro/1000000 time_sec, total_waits FROM dba_hist_system_event WHERE event LIKE 'log file switch%' AND snap_id BETWEEN X AND Y - 重点看
time_sec:若log file switch (checkpoint incomplete)单次平均等待超10秒,说明DBWR根本追不上,不是LGWR慢,是检查点卡死
从AWR反推日志组是否太小
别先翻Redo size per second,先看日志切换频率——这是最敏感的指标:
- 在AWR的「Instance Activity Stats」节找
log switches (derived),算出每小时切换次数;超过12次(即平均≤5分钟一次)就危险 - 用SQL验证:
SELECT COUNT(*) FROM dba_hist_log_history WHERE first_time > SYSDATE - 1/24,结果>180基本坐实 - 结合Redo写入速率估算最小安全日志组总容量:比如AWR显示
Redo size per second是1.09 MB/s,则30分钟需容纳约2.0 GB,日志组总容量必须≥2 GB,否则必然高频切换
增删日志组时AWR给不了的实操红线
AWR能告诉你“有问题”,但不会警告你DROP会卡住数据库。这些动作必须人工盯状态:
- 新增日志组后,必须执行多次
ALTER SYSTEM SWITCH LOGFILE,再查v$log确认新组已变成CURRENT,且旧组全为INACTIVE,才能删旧组 - 绝对禁止对
STATUS是ACTIVE或CURRENT的组执行ALTER DATABASE DROP LOGFILE GROUP N,否则报ORA-01623 - 别只加1个大日志组:至少配4组,每组≥500M(OLTP建议2G)。组太少,即使单组很大,循环仍快,DBWR还是写不过来
- 归档路径IO慢也会触发
log file switch (archiving needed):AWR里若log file parallel writeavg LOG_ARCHIVE_DEST_1 换到本地SSD
真正卡住业务的是 log file switch (checkpoint incomplete),它背后是DBWR刷脏块跟不上,不是LGWR写日志慢——所以盯着 log file parallel write 平均值没用,得看 v$sysstat 里 physical writes 是否突增,以及数据文件所在磁盘的随机I/O延迟。











