ALTER DISKGROUP REBALANCE POWER调高不一定更快,因实际并行度受ASM_POWER_LIMIT限制,且ARBn进程数量有限;盲目设高值易引发I/O饱和、队列深度超限及元数据争用。

为什么 ALTER DISKGROUP ... REBALANCE POWER 值调高不一定更快
很多人一看到 REBALANCE POWER 默认是 1,就直接设成 11,以为能“加速完成”,结果反而拖慢整体 I/O、卡住业务。根本原因在于:RBAL 进程本身不干活,它只协调;真正搬运数据的是 ARBn(ARB0 到 ARB9)进程,而它们的数量受 ASM_POWER_LIMIT 控制——不是你单条 SQL 的 POWER 值说了算。
-
ASM_POWER_LIMIT是集群级参数,决定最多能起多少个ARBn进程(默认为 1,最大 11) - 单条
ALTER DISKGROUP ... REBALANCE POWER N只影响本次操作的并行度上限,但不能超过ASM_POWER_LIMIT - 若
ASM_POWER_LIMIT=2,即使你写POWER 11,实际也只用 2 个ARBn进程 - 全闪存下盲目设
POWER 11容易压垮 NVMe 队列深度,引发v$asm_disk_iostat.read_time突增
如何安全地提升 Rebalance 实际吞吐
关键不是堆 POWER,而是让 I/O 路径高效、无争抢、无瓶颈。以下动作必须同步做:
- 确认所有 RAC 节点的 NVMe 设备调度器统一为
none:echo none > /sys/block/nvme0n1/queue/scheduler(替换为真实设备名) - 检查
ASM_POWER_LIMIT是否已调高(如设为 8~10),并在所有节点重启 ASM 实例生效 - 确保新加入磁盘与原磁盘物理性能接近——混用不同型号/磨损度的 SSD,会导致 rebalance 卡在 slowest disk 上
- 避免在高峰期执行,尤其避开大量归档生成或大批量索引重建时段
- 观察
v$asm_operation中EST_RATE和SOFAR/EST_WORK比值,若长期低于 10 MB/s 且read_time> 5ms,说明底层 I/O 已饱和
哪些场景下该降 POWER 而不是升
不是所有 rebalance 都要“快”。有些情况压低 POWER 反而是最优解:
- 在线添加磁盘后仅需快速“预热”而非彻底均衡:用
POWER 1让 RBAL 启动轻量级扫描,触发 AU 分布调整,但不触发大规模数据迁移 - 磁盘组内已有大量小文件(如 LOB 段、审计表):高 POWER 会加剧元数据锁争用,
v$asm_file查询变慢,甚至阻塞 DDL - 跨 Failgroup 添加磁盘但未显式指定 failgroup 名称:高 POWER 可能引发节点间大量
gc current等待,此时应先ADD DISK ... FAILGROUP FG1显式划分,再用POWER 3~5 - 存储层存在隐性瓶颈(如 PCIe Switch 共享带宽、多路径链路不均):此时提速只会放大抖动,不如用低 POWER + 更长窗口稳扎稳打
监控 Rebalance 是否真在“有效推进”
别只盯着 v$asm_operation 的 STAT 是 EXECUTING 就放心。真正要盯的是三类信号:
- 查
v$asm_disk_iostat:关注read_time和write_time是否持续 > 10ms(机械盘可容忍,全闪存 > 2ms 就预警) - 看
v$asm_operation的ACTUAL是否始终等于POWER:如果ACTUAL ,说明系统自动降频了,背后可能是 CPU、内存或 I/O 资源不足 - 比对
v$asm_disk的OS_MB_USED:新增磁盘的使用量是否缓慢上升?若长时间为 0,说明 rebalance 根本没写入,可能卡在元数据同步或权限校验上
最常被忽略的点是:rebalance 速度不取决于你设的数字,而取决于最慢的那个环节——可能是某块盘的 firmware bug,也可能是某个节点的 udev 规则没生效导致路径识别异常。别跳过 asmcmd lsdsk -p 和 lsblk -d -o name,rota 的交叉验证。


















