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 取值

Power19c 最大12c 最大11g 最大
默认111
最大1024102411
ASM_POWER_LIMIT 默认111

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 OLTP1-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. 最佳实践

  1. 业务低峰执行 rebalance:减少影响
  2. Power 按场景选择:高峰 1-2,低峰 4-8,维护 11-MAX
  3. 批量操作:单次添加多个 Disk
  4. 监控 v$asm_operation:实时跟踪
  5. 19c+ 用自动 parallel:减少手动调优
  6. 设置 ASM_POWER_LIMIT:全局上限
  7. 使用 SSD:rebalance 速度提升数倍
  8. 预留维护窗口:大规模变更
  9. Disk 大小一致:减少不必要的 rebalance
  10. 使用 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