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. 最佳实践
- 私有网络专用:性能
- 服务隔离:减少 Cache Fusion
- 序列 NOORDER:避免同步
- 分区表:减少热点
- ASM:I/O 均衡
- 足够内存:减少传输
- 监控 gc:瓶颈
- AWR RAC 报告:分析
- TAF:高可用
- 测试扩展性:验证
14. 参考资料
[1] Oracle Real Application Clusters Administration and Deployment Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/