Oracle 高并发场景优化
Oracle 高并发场景优化
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
高并发场景优化[1]:
挑战:
- 锁争用
- Latch/Mutex 争用
- 内存竞争
- I/O 瓶颈
2. 锁争用优化
2.1 序列优化
-- 1. NOORDER + CACHE
CREATE SEQUENCE seq_emp NOORDER CACHE 1000;
-- 2. RAC 多序列
2.2 减少 HOT BLOCK
-- 1. 反向键索引
CREATE INDEX idx_id_rev ON employees(id) REVERSE;
-- 2. 分区
CREATE TABLE sales (...) PARTITION BY HASH(id) PARTITIONS 8;
-- 3. 哈希分区
2.3 INITRANS
-- 高并发表
CREATE TABLE ... (...)
INITRANS 20;
-- 现有表
ALTER TABLE ... INITRANS 20;
ALTER TABLE ... MOVE INITRANS 20;
3. 解析优化
3.1 绑定变量
-- 减少 hard parse
EXECUTE IMMEDIATE 'SELECT * FROM emp WHERE id = :1' USING v_id;
3.2 CURSOR_SHARING
ALTER SYSTEM SET cursor_sharing = FORCE;
-- 或 EXACT(推荐)
3.3 SESSION_CACHED_CURSORS
ALTER SYSTEM SET session_cached_cursors = 300;
3.4 OPEN_CURSORS
ALTER SYSTEM SET open_cursors = 1000;
4. 内存优化
4.1 Shared Pool
-- 增大
ALTER SYSTEM SET shared_pool_size = 4G;
-- 监控
SELECT * FROM v$librarycache;
4.2 Buffer Cache
ALTER SYSTEM SET db_cache_size = 16G;
4.3 KEEP Pool
-- 热点表 KEEP
ALTER TABLE small_hot_table STORAGE (BUFFER_POOL KEEP);
ALTER INDEX idx_hot STORAGE (BUFFER_POOL KEEP);
5. 连接管理
5.1 共享服务器
ALTER SYSTEM SET shared_servers = 10;
ALTER SYSTEM SET max_shared_servers = 100;
5.2 DRCP
-- Database Resident Connection Pooling
ALTER SYSTEM SET enable_drcp = TRUE;
5.3 连接池
- 应用层连接池
- 减少连接建立
详细见:Oracle 网络性能优化。
6. I/O 优化
6.1 ASM
- 多磁盘
- I/O 均衡
6.2 SSD
- 热点表
- 索引
6.3 REDO 分离
-- Redo 专用磁盘
ALTER DATABASE ADD LOGFILE GROUP 1
('/redo1/redo01.log', '/redo2/redo01.log') SIZE 2G;
7. 并发控制
7.1 队列
-- Resource Manager
ALTER SYSTEM SET resource_manager_plan = 'my_plan';
详细见:Oracle 资源管理器 Resource Manager。
7.2 并发限制
-- Profile
CREATE PROFILE app_profile LIMIT
SESSIONS_PER_USER 10;
8. RAC 优化
8.1 服务分离
srvctl add service -db orcl -service oltp_svc -preferred orcl1 -available orcl2
8.2 减少跨节点
- 业务分布
- 数据分布
详细见:Oracle RAC 性能调优。
9. 应用层优化
9.1 短事务
- 及时提交
- 减少锁持有
9.2 批量操作
-- BULK
FORALL i IN 1..v.COUNT
INSERT INTO ... VALUES v(i);
9.3 异步处理
- 队列
- 后台任务
10. 监控
10.1 并发会话
SELECT COUNT(*) FROM v$session WHERE status = 'ACTIVE';
10.2 锁等待
SELECT
blocking_session,
sid,
event
FROM v$session
WHERE blocking_session IS NOT NULL;
10.3 Latch
SELECT
name,
gets,
misses,
spin_gets
FROM v$latch
WHERE misses > 0
ORDER BY misses DESC;
10.4 Mutex
SELECT
wait_class,
event,
total_waits
FROM v$system_event
WHERE event LIKE 'cursor%' OR event LIKE 'library cache: mutex%';
11. 常见问题
11.1 性能突降
- 锁等待爆发
- 突发流量
- 资源耗尽
11.2 连接拒绝
ORA-12520: listener could not find available handler
- 1. PROCESSES 不足
- 2. 共享服务器配置
- 3. 连接池
11.3 ORA-04031
- 1. 增大 Shared Pool
- 2. 绑定变量
- 3. 减少 SQL
12. 性能对比
12.1 低并发
- 10 TPS
- 0 锁等待
- 1 秒响应
12.2 高并发
- 1000 TPS
- 锁等待多
- 5 秒响应
12.3 优化后
- 1000 TPS
- 锁等待少
- 0.5 秒响应
13. 常见坑与排错
13.1 序列争用
-- 1. NOORDER CACHE
-- 2. 增大 CACHE
ALTER SEQUENCE seq_emp CACHE 1000;
13.2 解析爆炸
-- 1. 绑定变量
-- 2. 监控硬解析
SELECT name, value FROM v$sysstat
WHERE name IN ('parse count (hard)', 'parse count (total)');
13.3 热点块
-- 1. 反向索引
-- 2. 分区
-- 3. 哈希分区
14. 最佳实践
- 绑定变量:减少解析
- 序列 NOORDER:RAC 友好
- INITRANS 高:减少 ITL
- KEEP Pool:热点表
- 短事务:减少锁
- 批量操作:减少往返
- 连接池:复用
- DRCP:大量连接
- 服务分离:RAC
- Resource Manager:控制
15. 参考资料
[1] Oracle Database Performance Tuning Guide 19c, “High Concurrency” https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/