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

  1. 绑定变量:减少解析
  2. 序列 NOORDER:RAC 友好
  3. INITRANS 高:减少 ITL
  4. KEEP Pool:热点表
  5. 短事务:减少锁
  6. 批量操作:减少往返
  7. 连接池:复用
  8. DRCP:大量连接
  9. 服务分离:RAC
  10. Resource Manager:控制

15. 参考资料

[1] Oracle Database Performance Tuning Guide 19c, “High Concurrency” https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/