重平衡耗时长的首要原因并非asm_power_limit设低,而是底层i/o路径饱和(如%util>95%、await>20ms)或存在磁盘异常(state=missing)、路径中断、lun屏蔽等隐性瓶颈;v$asm_operation中sofar不增、state非executing、header_status非member或rac节点路径不一致均表明搬运受阻,而非速度不足;rac环境下多节点并发加剧i/o叠加压力,应按需使用alter diskgroup rebalance power n wait并确保物理路径隔离与failgroup合理分布。

重平衡耗时长,真不是因为POWER设低了
重平衡慢的首要原因,往往不是asm_power_limit太小,而是底层I/O路径已饱和或存在隐性瓶颈。比如存储%util > 95%、await > 20ms时,哪怕把asm_power_limit设到11,ARBx进程只会更密集地排队,反而拉长总耗时。v$asm_operation里sofar和est_work长期不动,大概率卡在磁盘异常(如STATE = MISSING)、路径中断或LUN被屏蔽,不是“不够快”,而是根本走不通。
v$asm_operation显示EST_MINUTES不降,别急着调参
看到EST_MINUTES没变,不代表重平衡卡死——它只是基于当前搬运速率的粗略估算,不反映真实阻塞点。真正要盯的是:
-
sofar是否增长:不增说明AU搬运停滞 -
state是否为EXECUTING:若为WAITING或OFFLINE,说明依赖资源未就绪 - 对应磁盘的
header_status是否为MEMBER:CANDIDATE或PROVISIONED状态的盘无法参与搬运 - 检查
gv$asm_disk中该磁盘path是否在所有RAC节点都可见且mode_status = 'ONLINE'
RAC环境下重平衡I/O压力是叠加的
在RAC中,每个节点的ARBx进程独立发起I/O请求,同一时间多个节点同时运行REBALANCE,I/O压力是物理叠加的。常见误操作:
- 全局执行
ALTER SYSTEM SET asm_power_limit=8,导致所有节点同时以高并发争抢存储带宽 - 没查
gv$asm_operation就直接启动新平衡,结果多个STATE = RUN的操作并行,%util瞬间冲顶 - 混闪或机械盘环境仍设
POWER=8,单次AU搬运(默认1MB)在高延迟设备上放大排队效应
更稳妥的做法是:用ALTER DISKGROUP dg_name REBALANCE POWER N WAIT按需启动,操作结束自动恢复默认值;避开业务高峰;全闪存可试6–8,混闪建议≤4,并实时盯iostat -xm 1的%util和await。
磁盘组拓扑缺陷会让重平衡“越调越慢”
如果6块盘全在一个FailGroup,或全部挂载在同一HBA通道下,再细的条带也白搭。此时调asm_power_limit只是让争抢更剧烈,抖动更大。必须从源头隔离I/O路径:
- 用
ls -l /dev/disk/by-path/核对ASM磁盘是否分散在不同物理路径(别只看/dev/sdb这种抽象名) - 确认每块盘的WWID与
/etc/multipath.conf中alias定义一致,避免多路径识别错乱 - HIGH冗余磁盘组加盘必须成对,否则
ADD DISK会失败,后续重平衡根本不会触发 - 检查
v$asm_diskgroup.redundancy和v$asm_disk.failgroup,确保FailGroup分布合理
重平衡不是拼速度,而是拼路径干净度。路径一乱,再高的POWER也只是往堵死的路口派更多车。











