Redo size 是实例启动到快照结束写入 log_buffer 的逻辑字节数,非归档量;其每秒值仅反映 redo 生成强度,需结合日志切换频率(理想2–4次/小时)评估日志大小合理性,RAC中各实例日志组大小必须完全一致。
redo size 在 awr 里不是归档量,而是从实例启动到快照结束写入 log_buffer 的逻辑字节数;直接拿单个快照的值除以时间会严重高估归档速率,也完全不能用于判断日志文件大小是否合理。
看 AWR 中的 Redo size 每秒值只是起点,不是结论
AWR 报告 “Load Profile” 部分的 Redo size(单位:bytes/sec)告诉你当前负载下 redo 的生成强度,但它本身不说明日志文件该设多大。关键要结合日志切换频率反推——因为真正影响性能的是 LGWR 是否频繁等待、CHECKPOINT 是否来得及完成。
- 若 AWR 显示
Redo size≈ 1.09 MB/s,那 20 分钟理论产生量是 1.09 × 60 × 20 ≈ 1.3 GB;这意味着日志组总容量若小于这个数,就大概率每 20 分钟切一次——太频繁 - 但注意:
Redo size含 block padding、SCN 标记、IMU 开销等,实际落盘的归档文件体积通常只有它的 70%–90% - 不要用
DBA_HIST_SNAPSHOT.END_INTERVAL_TIME直接相减算间隔,它有分钟级漂移;应查DBA_HIST_SYSSTAT中连续两个SNAP_ID对应的真实采集时刻
查日志切换频率比看 Redo size 更直接有效
日志每小时切换次数才是衡量 redo 配置是否健康的黄金指标。理想区间是 2–4 次/小时(即 15–30 分钟切一次),低于 2 次可能恢复窗口过长,高于 4 次则易触发 log file switch (checkpoint incomplete) 等待事件。
- 在
alert.log里 grepThread 1 advanced to log sequence,统计单位时间内的出现次数 - 用 SQL 查历史切换节奏(需启用
STATISTICS_LEVEL = TYPICAL):SELECT TRUNC(first_time,'HH24') dt, COUNT(*) switches FROM v$log_history WHERE first_time > SYSDATE - 7 GROUP BY TRUNC(first_time,'HH24') ORDER BY dt;
- 如果发现某小时切换了 8 次,而 AWR 显示同期
Redo size是 1.5 MB/s,那当前日志组总容量很可能不足 1.5 × 60 × 60 ÷ 8 ≈ 675 MB
RAC 环境下必须各实例日志组大小完全一致
在 Oracle 11g RAC 中,v$log.bytes 值在不同 thread# 下哪怕差 1 字节,都可能引发检查点推进卡顿、归档堆积甚至 ORA-15042 错误——这不是性能问题,是架构硬约束。
- 执行以下语句确认对齐:
SELECT a.thread#, a.group#, a.bytes, b.member FROM v$log a, v$logfile b WHERE a.group# = b.group# ORDER BY a.thread#, a.group#;
- 常见错配:同一
group#在 thread 1 是 200M,在 thread 2 是 100M;或一个实例有 group 4,另一个没有 - 添加新日志组时必须显式指定
THREAD n,否则只作用于当前实例,其他节点不可见
真正难的不是算出“该设多大”,而是确保所有实例、所有线程、所有日志组在 bytes、member 路径、group# 编号上完全镜像——漏掉任意一个字段的比对,扩容操作就可能让 RAC 实例间互相拖慢。


















