RMAN备份与批处理业务抢I/O本质是磁盘队列和buffer cache latch被占满,需拆分DATABASE与ARCHIVELOG备份、用RATE限速、降级压缩算法至BASIC、清除CONFIGURE CHANNEL全局配置并显式ALLOCATE/RELEASE通道。

RMAN 备份与批处理业务抢 I/O,本质不是“备份太慢”,而是 RMAN 在高并发读取数据文件 + 扫描归档日志 + 压缩校验时,把磁盘队列和 buffer cache latch 全占满了——业务 SQL 一上来就卡在 db file sequential read 或 latch: cache buffers chains 上。直接调 BACKUP DURATION 或 MINIMIZE LOAD 不仅压不住争用,反而让 CPU 更久地空转等 I/O,业务响应更抖。
拆开备份动作:别把 DATABASE 和 ARCHIVELOG 塞进同一个 RUN 块
这是最常被忽略的争用放大器。RMAN 默认在单个 RUN 块里执行 BACKUP DATABASE 和 BACKUP ARCHIVELOG ALL,会导致归档日志扫描线程和数据文件读取线程反复争抢 shared pool 中的 log buffer latch 和 buffer cache chain latch。
- 正确做法是严格分离:先
BACKUP DATABASE,RELEASE CHANNEL,再另起一个 RUN 块做BACKUP ARCHIVELOG ALL DELETE INPUT - 每个 RUN 块末尾显式加
RELEASE CHANNEL,避免通道进程持续持有 PGA 内存和后台 latch - 如果归档量大(比如每小时 20GB+),可进一步切分:按
ARCHIVELOG LIKE '/arch/2026_09_%'分批次备份,减少单次扫描范围
限制单通道吞吐:RATE 比 DURATION 更可控
BACKUP DURATION 01:00 MINIMIZE LOAD 是个误导性组合——它只放缓读节奏,但压缩、校验、归档解析仍在全速跑 CPU,I/O 队列反而更长。真正能削尖峰的是用 RATE 直接掐住写入带宽。
- 对 SATA/SAS 阵列,设
ALLOCATE CHANNEL c1 DEVICE TYPE DISK RATE 12M(单位必须带M);SSD 可放宽到40M,但别超磁盘实测顺序写上限 - 不要依赖
CONFIGURE CHANNEL DEVICE TYPE DISK RATE全局配置——它会让所有后续 RMAN 连接自动套用,包括非备份类维护任务 - 验证是否生效:运行中查
V$SESSION_LONGOPS,若SO FAR/TOTALWORK比值稳定爬升(而非剧烈跳变),说明限速已起作用
关掉压缩或降级算法:CPU 热点往往藏在 ALGORITHM 里
11g 默认压缩算法是 'MEDIUM',实测比 'BASIC' 多消耗 80%+ CPU 周期,尤其在 vCPU 被其他 VM 抢占的虚拟环境里,这会直接拖垮批处理事务的软中断响应。
- 确认当前设置:
SHOW COMPRESSION ALGORITHM;,如果不是BASIC,立刻改:CONFIGURE COMPRESSION ALGORITHM 'BASIC'; - 若业务强依赖压缩率(比如网络带宽受限),宁可用
AS COMPRESSED BACKUPSET显式指定,也别留CONFIGURE BACKUP OPTIMIZATION ON——后者会偷偷启用压缩且无法细粒度控制 - 禁用压缩的底线操作:
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COPY;(注意这不是BACKUP AS COPY,而是改变默认备份类型)
清理 CONFIGURE CHANNEL 全局配置:空转通道是隐形 CPU 杀手
11g 默认开启 CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/path/%U',后果是:哪怕你没跑任何备份,每个新 RMAN 连接都会自动分配通道并常驻 PGA,后台进程持续做心跳检测,V$PROCESS 里能看到多个 ora_*_xxx 进程长期占用 5–10% CPU。
- 清掉这个隐患:
CONFIGURE CHANNEL DEVICE TYPE DISK CLEAR;(注意不是RESET) - 之后所有备份都显式
ALLOCATE CHANNEL,用完即RELEASE,彻底切断空转链路 - 检查残留:
SELECT program FROM v$session WHERE program LIKE 'rman%';,若发现无对应 RUN 块的 rman 进程,立刻ALTER SYSTEM KILL SESSION
真正难控的从来不是 RMAN 参数本身,而是它和底层存储栈、虚拟化层、buffer cache 管理机制之间那些没文档明说的耦合点——比如 RATE 限速实际影响的是 RMAN 的写缓冲区填充频率,而这个频率又反向决定着 log file sync 的等待深度。调参前,先用 iotop -a 和 perf record -e block:block_rq_issue 看清 I/O 请求到底卡在哪一层。


















