RMAN备份慢应先检查等待事件,重点关注db file sequential/scattered read和direct path write;若平均等待>20ms,表明存储响应慢;再通过dd或orion实测存储性能,合理配置通道数与SECTION SIZE,并隔离FRA存储以避免I/O竞争。
检查 RMAN 备份作业的 wait event 是否卡在 I/O 上
rman 备份慢,第一反应不是调参数,而是看它到底卡在哪。直接查当前或历史备份会话的等待事件,重点盯 db file sequential read、db file scattered read 和 direct path write 这三类。如果这些等待时间占比高(比如单次平均 > 20ms),基本可判定是存储层响应慢。
实操建议:
- 对正在运行的备份,执行
SELECT sid, event, p1text, p1, p2text, p2, p3text, p3, seconds_in_wait FROM v$session_wait WHERE event LIKE 'db file%' OR event LIKE 'direct path%'; - 查历史备份的等待统计:用
RMAN> LIST BACKUP SUMMARY;拿到 backupset key,再关联v$rman_backup_job_details查input_bytes_per_sec和output_bytes_per_sec,明显低于存储标称吞吐(如低于 50MB/s 而存储理论可达 200MB/s)就是信号 - 注意区分:如果
control file sequential read或log file sync等也高,说明问题可能不在备份路径,而是实例整体 I/O 压力大
验证存储设备实际读写能力是否达标
RMAN 的读取来自数据文件,写入目标是备份集(磁盘或 SBT 设备)。不能只信厂商标称值,得用真实工具测。关键是模拟 RMAN 的 I/O 模式:大块(1MB+)、顺序、direct I/O、多并发。
实操建议:
- 用
dd测裸设备或文件系统:例如dd if=/dev/zero of=/backup/testfile bs=1M count=2048 oflag=direct,观察dd输出的写入速度;再用dd if=/backup/testfile of=/dev/null bs=1M iflag=direct测读 - Oracle 自带的
orion工具更贴近真实场景:运行orion -run advanced -testname orion_test -num_disks 4 -write_pct 0 -duration 300(根据 LUN 数量和业务读写比调整) - 若使用 NFS 存储,必须确认 mount 选项含
noac(禁用属性缓存)和hard,intr,否则ls都不卡,RMAN 却频繁超时重试
排查 RMAN 配置中影响 I/O 并发的关键参数
RMAN 不是开越多通道就越快——通道数超过底层存储处理能力,反而引发排队和锁争用。关键不是“设多少”,而是“是否匹配硬件拓扑”。
实操建议:
- 检查当前配置:
SHOW DEVICE TYPE DISK PARALLELISM;和SHOW CHANNEL DEVICE TYPE DISK;,确认实际启用的通道数(不是ALLOCATE CHANNEL的语句数) - 典型陷阱:SAN 环境下,一个 LUN 对应多个物理磁盘,但 RMAN 开了 8 个通道打向同一个 LUN,后端磁盘头已饱和,再加通道毫无意义
- 推荐做法:按后端物理磁盘组划分通道,例如 4 个独立 LUN → 最多设
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;;若用 ASM,通道数不应超过ASM_DISKGROUPS中磁盘组的 failure group 数量 - 别忽略
BACKUP ... SECTION SIZE:默认不限制,大文件(如 200GB 表空间)会被单通道串行读完;手动切分(如SECTION SIZE 1G)才能让多个通道真正并行读同一文件
识别隐性瓶颈:归档日志与 FRA 空间竞争
很多人只盯着备份目标路径,却忘了 RMAN 备份过程中大量依赖归档日志——尤其增量备份或备份后删除归档时,FRA(Fast Recovery Area)本身也在被高频读写。FRA 若和数据文件共用同一存储阵列,I/O 就会打架。
实操建议:
- 查 FRA 使用率:
SELECT * FROM V$RECOVERY_FILE_DEST;,若SPACE_USED / SPACE_LIMIT > 80%,归档写入可能被限速甚至挂起 - 监控归档生成速率:
SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME IN ('archived log written','redo writes');,对比备份窗口内归档量是否突增(比如应用批量导入触发日志风暴) - 临时缓解:备份前用
ALTER SYSTEM ARCHIVE LOG CURRENT;主动切日志,清空当前日志缓冲;长期方案是把 FRA 单独挂载到低延迟 SSD 阵列,与数据文件存储物理隔离
真正卡住 RMAN 的,往往不是某个单一配置,而是存储路径上多个环节的叠加延迟:从数据文件所在 LUN 的队列深度,到 NFS 客户端的 TCP 窗口大小,再到 SBT 库调用介质管理器的超时设置。每层都得单独验证,不能靠猜。



















