ALTER DISKGROUP REBALANCE POWER没效果,是因为Oracle不动态重载POWER值,只在操作发起时读取一次;若gv$asm_operation中power列未变,说明需用ALTER DISKGROUP … REBALANCE POWER N强制指定本次操作功率,而非仅改asm_power_limit参数。

为什么ALTER DISKGROUP REBALANCE POWER没效果
改了asm_power_limit参数但rebalance还是慢,大概率是因为你改的是全局配置,而当前正在执行的rebalance操作早已按旧值启动。Oracle不会动态重载POWER值——它只在操作发起时读取一次。
实操建议:
- 确认当前rebalance是否真用了新值:
SELECT inst_id, operation, state, power, sofar, est_work FROM gv$asm_operation—— 若power列没变,说明ALTER SYSTEM没被本次操作继承 - 强制指定本次操作的POWER:
ALTER DISKGROUP dg1 REBALANCE POWER 7(注意:不是ALTER SYSTEM SET asm_power_limit=7) - RAC环境下,必须在所有节点都执行该语句,否则ARB进程无法协同,部分节点可能仍用默认POWER=1
底层I/O卡死才是rebalance慢的主因
看到v$asm_operation里state = 'EXECUTING'但est_minutes不动、sofar几乎不涨,这不是ASM慢,是它在反复重试读写失败的磁盘——90%的case根本不是ASM配置问题,而是底层I/O在“装死”。
实操建议:
- 立刻在所有RAC节点跑:
smartctl -a /dev/sdX,紧盯三项:Reallocated_Sector_Ct、Current_Pending_Sector、UDMA_CRC_Error_Count—— 任一非零,该盘就是定时炸弹 - 查系统日志:
grep "I/O error\|aborted command\|resetting link" /var/log/messages,时间戳必须和rebalance启动时间对齐 - 用
dd if=/dev/zero of=/dev/sdX bs=1M count=1024 oflag=direct测单次写延迟:>500ms 或报Input/output error,直接标记为故障盘 -
asmcmd lsdsk只认路径通不通,不认扇区能不能写,别信它
rebalance卡在WAITING状态的真实含义
WAITING不是空闲,是ASM在等前置条件满足——最常见的是磁盘组里还有别的操作没结束,或某块盘处于PROVISIONED/UNKNOWN状态,没真正上线。
实操建议:
- 先清场:
SELECT * FROM v$asm_operation必须返回空结果,否则ADD/DROP/REBALANCE都会被阻塞 - 查磁盘真实状态:
SELECT name, state, header_status, mode_status, repair_timer FROM v$asm_disk WHERE group_number = (SELECT group_number FROM v$asm_diskgroup WHERE name = 'YOUR_DG_NAME') - 若发现
state = 'DROPPING'且repair_timer = 0,说明ASM已放弃等待,但AU迁移被I/O错误卡住;此时ALTER DISKGROUP DROP DISK已无效,必须加FORCE清除元数据残留:ALTER DISKGROUP YOUR_DG_NAME DROP DISK 'ORCL:BAD_DISK' FORCE
ASMLib残留会直接拖垮rebalance性能
Oracle 19c RAC中,ASMLib不仅无用,还会让ASM I/O严重下降甚至引发集群宕机。它绕过Linux块设备层,与ASMFD内核过滤逻辑冲突,导致每次I/O都触发双重校验或重定向。
实操建议:
- 检查是否残留:
lsmod | grep oracleasm—— 非空即风险;kfed read /dev/mapper/mpatha | head -20若看到AFD签名被覆盖或报KFED-00322,说明磁盘头已被污染 - 清理动作必须完整:
oracleasm disable && oracleasm exit && rmmod oracleasm;删udev规则:rm -f /etc/udev/rules.d/99-oracle-asm.rules;最后asmfd -i启用AFD - 全闪存阵列rebalance POWER可设6–8;混闪或机械盘务必≤4,并用
iostat -xm 1盯%util和await—— >95% 或 >20ms 就得降POWER
rebalance慢从来不是单一配置问题,而是存储层、驱动层、集群层、ASM层四层叠加的结果。最容易被忽略的是CSSD心跳抖动和ASMLib残留——前者会让ARB进程“失联”,后者会让I/O路径彻底错乱。动手前先看gv$css_history和lsmod,比调POWER有用十倍。


















