Oracle RAC 性能调优

Oracle RAC 性能调优

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

RAC(Real Application Clusters) 多实例共享存储[1]:

性能挑战

  • Cache Fusion
  • 节点间通信
  • 全局锁
  • I/O 共享

2. Cache Fusion

2.1 概述

  • 实例间数据块传输
  • 通过私有网络

2.2 等待事件

gc cr block 2-way
gc cr block 3-way
gc current block 2-way
gc buffer busy acquire
gc buffer busy release

2.3 查看

SELECT 
  event,
  total_waits,
  time_waited
FROM v$system_event
WHERE event LIKE 'gc%'
ORDER BY time_waited DESC;

3. 性能问题

3.1 高 gc 等待

原因

  • 节点间频繁访问同一块
  • 序列生成
  • 热点块

优化

-- 1. 序列 NOORDER CACHE
CREATE SEQUENCE seq_emp NOORDER CACHE 1000;

-- 2. 分区表
-- 3. 服务隔离
-- 4. RAC Service 配置

3.2 节点间通信

优化

-- 1. 私有网络优化
-- - 巨帧
-- - UDP
-- - 高带宽
-- 2. GC_SERVER_PROCESSES
ALTER SYSTEM SET gc_server_processes = 4;

4. RAC Service

4.1 配置

srvctl add service -db orcl -service oltp_svc \
  -preferred orcl1 -available orcl2

4.2 TAF

-- 透明应用故障切换
-- tnsnames.ora
ORCL = (FAILOVER=ON)(LOAD_BALANCE=ON)
       (ADDRESS=...)
       (CONNECT_DATA=(SERVICE_NAME=oltp_svc)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)))

4.3 服务分离

  • OLTP:节点 1
  • BATCH:节点 2
  • 报表:节点 3

5. 序列优化

5.1 NOORDER

-- RAC 推荐 NOORDER(除非严格顺序)
CREATE SEQUENCE seq_emp NOORDER CACHE 1000;

5.2 ORDER 性能

-- ORDER 性能差(跨节点同步)
-- 仅在必要时使用

6. 热点块

6.1 识别

SELECT 
  obj.object_name,
  bh.file#,
  bh.block#,
  bh.class#,
  COUNT(*) AS blocks
FROM v$bh bh, dba_objects obj
WHERE bh.objd = obj.data_object_id
GROUP BY obj.object_name, bh.file#, bh.block#, bh.class#
HAVING COUNT(*) > 100
ORDER BY blocks DESC;

6.2 优化

  • 减少热点块
  • 分区
  • 反向索引
  • 哈希分区

7. I/O 调优

7.1 ASM

-- 多磁盘组
-- +DATA: 数据
-- +FRA: 归档
-- +REDO: Redo

7.2 Redo 分离

-- 每节点独立 Redo
-- Redo 在专用磁盘

8. 内存调优

8.1 Buffer Cache

-- 每节点足够
-- 减少 Cache Fusion
ALTER SYSTEM SET db_cache_size = 8G;

8.2 共享池

ALTER SYSTEM SET shared_pool_size = 2G;

9. 监控

9.1 RAC 视图

-- 实例
SELECT * FROM gv$instance;

-- 会话
SELECT inst_id, sid, serial#, username, status FROM gv$session;

-- 等待
SELECT inst_id, event, COUNT(*) FROM gv$session_wait
GROUP BY inst_id, event;

9.2 AWR RAC 报告

@?/rdbms/admin/awrgrpt.sql
@?/rdbms/admin/awrgrpti.sql  -- 单实例

9.3 ASH RAC

SELECT inst_id, sql_id, COUNT(*) 
FROM gv$active_session_history
WHERE sample_time > SYSDATE - 1/24
GROUP BY inst_id, sql_id;

10. Clusterware

10.1 查看

crsctl stat res -t
crsctl check crs

10.2 节点

olsnodes -n
olsnodes -s -t

10.3 VIP/SCAN

srvctl status vip -n node1
srvctl status scan

11. 性能基线

11.1 单节点 vs RAC

单节点:无 Cache Fusion
RAC:Cache Fusion 开销

11.2 扩展性

  • 读:扩展好
  • 写:可能瓶颈
  • 热点:瓶颈

12. 常见坑与排错

12.1 gc 等待高

-- 1. 检查热点
-- 2. 序列 NOORDER
-- 3. 服务隔离
-- 4. 分区

12.2 节点间通信慢

# 1. 私有网络
ifconfig

# 2. 巨帧
ifconfig eth1 mtu 9000

# 3. ping 测试
ping -s 8972 node2-priv

12.3 节点驱逐

# 1. 检查心跳
# 2. 检查 OS 资源
# 3. 检查 CSSD
crsctl stat res ora.cssd

13. 最佳实践

  1. 私有网络专用:性能
  2. 服务隔离:减少 Cache Fusion
  3. 序列 NOORDER:避免同步
  4. 分区表:减少热点
  5. ASM:I/O 均衡
  6. 足够内存:减少传输
  7. 监控 gc:瓶颈
  8. AWR RAC 报告:分析
  9. TAF:高可用
  10. 测试扩展性:验证

14. 参考资料

[1] Oracle Real Application Clusters Administration and Deployment Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/