ASM Rebalance Power 与并行度优化
ASM Rebalance Power 与并行度优化
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
ASM Rebalance 的速度由 Power 和 并行度 共同决定[1]:
- Power:粗粒度速度控制
- 并行度:实际 ARBn 进程数和并行 I/O 数量
2. Power 等级详解
2.1 Power 取值
| Power | 19c 最大 | 12c 最大 | 11g 最大 |
|---|---|---|---|
| 默认 | 1 | 1 | 1 |
| 最大 | 1024 | 1024 | 11 |
| ASM_POWER_LIMIT 默认 | 1 | 1 | 1 |
2.2 Power 与 I/O 影响
Power 1:1 个并行 I/O,最慢
Power 4:4 个并行 I/O
Power 8:8 个并行 I/O
Power 11:11 个并行 I/O(11g 上限)
Power 32:32 个并行 I/O(12c+)
Power 1024:1024 个并行 I/O(19c 最大)
2.3 Power 选择策略
| 场景 | Power | 原因 |
|---|---|---|
| 业务高峰 | 1-2 | 减少影响 |
| 业务低峰 | 4-8 | 平衡 |
| 维护窗口 | 11-32 | 快速完成 |
| 紧急 | MAX | 最快 |
| 7×24 OLTP | 1-2 | 保障业务 |
3. 并行度机制
3.1 ARBn 进程
Rebalance 由多个 ARBn 进程并行执行:
-- 查看运行中的 ARBn 进程
SELECT name, state, program
FROM v$asm_process
WHERE name LIKE 'ARB%';
-- 19c 自动并行
-- Power 8 → 多个 ARBn 进程
3.2 并行度计算
12c 之前:
- ARBn 进程数 = MIN(power, 11)
- 每个 ARBn 进程 1 个并行 I/O
12c+:
- 引入 parallel_degree
- Power × parallel_degree = 实际并行 I/O
19c+:
- 自动并行度
- 基于 CPU/IO 资源自动调整
3.3 parallel_degree 配置
-- 设置并行度
ALTER DISKGROUP data REBALANCE POWER 8;
-- 12c+ 高级配置
ALTER DISKGROUP data SET ATTRIBUTE 'rebalance.compatibility'='19.0.0.0';
4. 监控 Rebalance
4.1 实时进度
SELECT
group_number,
operation,
state,
power,
actual,
sofar,
est_work,
est_rate,
est_minutes,
ERROR_CODE
FROM v$asm_operation;
4.2 历史记录
-- 19c+ ASM Rebalance 历史
SELECT * FROM v$asm_operation_history;
-- 查看 rebalance 详情
SELECT
operation,
start_time,
end_time,
power,
sofar,
est_work,
actual,
ERROR_CODE
FROM v$asm_operation_history
ORDER BY start_time DESC
FETCH FIRST 20 ROWS ONLY;
4.3 I/O 统计
-- Disk I/O 统计
SELECT
group_number,
disk_number,
reads,
writes,
read_bytes,
write_bytes,
read_time,
write_time
FROM v$asm_disk_iostat
WHERE group_number = 1;
5. ASM_POWER_LIMIT 参数
5.1 全局限制
SHOW PARAMETER asm_power_limit;
-- 默认 1
-- 修改(动态)
ALTER SYSTEM SET asm_power_limit=8 SCOPE=BOTH;
5.2 影响范围
- 限制所有 rebalance 的最大 power
- 手动设置 power 不能超过此值(除非显式指定)
6. Rebalance 优化策略
6.1 按业务节奏
-- 业务高峰(9:00-18:00)
ALTER DISKGROUP data REBALANCE MODIFY POWER 1;
-- 业务低峰(18:00-22:00)
ALTER DISKGROUP data REBALANCE MODIFY POWER 4;
-- 维护窗口(22:00-6:00)
ALTER DISKGROUP data REBALANCE MODIFY POWER 11;
6.2 批量操作
-- 同时添加多个 Disk(单次 rebalance)
ALTER DISKGROUP data ADD DISK
'/dev/asm-disk5', '/dev/asm-disk6', '/dev/asm-disk7'
REBALANCE POWER 8;
-- 比 3 次单独添加效率高
6.3 提前规划
-- 预估 rebalance 时间
SELECT
est_work / NULLIF(est_rate, 0) / 60 AS est_minutes
FROM v$asm_operation;
7. Rebalance 与数据库交互
7.1 数据库负载影响
高业务负载 + 高 rebalance power:
- I/O 争用
- 响应延迟
- 可能 ORA-04031
策略:
- 监控数据库等待事件
- 必要时降低 power
7.2 数据库 ASM I/O
-- 数据库 ASM I/O 等待
SELECT event, total_waits, time_waited
FROM v$system_event
WHERE event LIKE '%cell%';
8. 自动 Rebalance
6.1 自动 Parallel
19c 引入:
-- 自动 parallel_degree
ALTER DISKGROUP data SET ATTRIBUTE 'auto_rebalance.compatibility'='19.0.0.0';
-- ASM 根据负载自动调整
6.2 智能 Power
-- 19c+ 自动 power
ALTER DISKGROUP data REBALANCE POWER AUTO;
9. 常见坑与排错
9.1 Rebalance 速度慢
现象:rebalance 进展缓慢。
排查:
-- 1. 检查 power
SELECT group_number, power, actual FROM v$asm_operation;
-- 2. 检查 ARBn 进程
SELECT name, state FROM v$asm_process WHERE name LIKE 'ARB%';
-- 3. 检查 I/O 等待
SELECT event, total_waits, time_waited
FROM v$system_event
WHERE event LIKE '%disk%';
修复:
-- 提高 power
ALTER DISKGROUP data REBALANCE MODIFY POWER 11;
-- 增加 ASM 资源
ALTER SYSTEM SET memory_target=2G SCOPE=BOTH;
9.2 Rebalance 卡住
修复:
-- 暂停后重启
ALTER DISKGROUP data REBALANCE MODIFY POWER 0;
-- 等待几秒
ALTER DISKGROUP data REBALANCE MODIFY POWER 8;
9.3 业务受影响
现象:rebalance 期间业务响应慢。
修复:
-- 1. 降低 power
ALTER DISKGROUP data REBALANCE MODIFY POWER 1;
-- 2. 错峰执行
-- 3. 使用 SSD 减少影响
9.4 Power 设置不生效
现象:v$asm_operation.actual < 请求的 power。
原因:
- ASM_POWER_LIMIT 限制
- ASM 资源不足
- I/O 子系统限制
修复:
-- 1. 提高 ASM_POWER_LIMIT
ALTER SYSTEM SET asm_power_limit=11 SCOPE=BOTH;
-- 2. 增加 ASM 内存
ALTER SYSTEM SET memory_target=2G SCOPE=BOTH;
9.5 估算时间偏差
现象:est_minutes 与实际相差大。
修复:
- 定期监控
- 考虑 I/O 波动
- 业务低峰执行
10. 最佳实践
- 业务低峰执行 rebalance:减少影响
- Power 按场景选择:高峰 1-2,低峰 4-8,维护 11-MAX
- 批量操作:单次添加多个 Disk
- 监控 v$asm_operation:实时跟踪
- 19c+ 用自动 parallel:减少手动调优
- 设置 ASM_POWER_LIMIT:全局上限
- 使用 SSD:rebalance 速度提升数倍
- 预留维护窗口:大规模变更
- Disk 大小一致:减少不必要的 rebalance
- 使用 disk_repair_time:减少 disk 故障引起的 rebalance
11. 参考资料
[1] Oracle Automatic Storage Management Administrator’s Guide 19c, “Tuning Rebalance” https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/tuning-asm-rebalance-operations.html
[2] Oracle Support Note 1558901.1, “ASM Rebalance Performance” https://support.oracle.com/epmos/faces/DocumentDisplay?id=1558901.1