Oracle Connection Pooling 详解

Oracle Connection Pooling 详解

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


1. 概述

Connection Pooling 连接池减少连接开销[1]:

详细见:Oracle 连接池与 DRCPOracle 共享服务器架构


2. 连接类型

2.1 专用服务器

- 每连接一进程
- OLTP
- 资源多

2.2 共享服务器

- 多连接共享进程
- 资源少
- 适合 idle 多

2.3 DRCP

- Database Resident Connection Pool
- 11g+
- 进程级共享

3. DRCP

3.1 配置

EXEC DBMS_CONNECTION_POOL.ALTER_PARAM(
  pool_name => 'SYS_DEFAULT_CONNECTION_POOL',
  param_name => 'MINSIZE',
  param_value => 4
);

EXEC DBMS_CONNECTION_POOL.ALTER_PARAM(
  pool_name => 'SYS_DEFAULT_CONNECTION_POOL',
  param_name => 'MAXSIZE',
  param_value => 40
);

EXEC DBMS_CONNECTION_POOL.START_POOL;

3.2 参数

- MINSIZE:最小
- MAXSIZE:最大
- INCRSIZE:增量
- SESSION_CACHED_CURSORS
- MAX_THINK_TIME

3.3 使用

# tnsnames.ora
prod = 
  (DESCRIPTION = 
    (ADDRESS = ...)
    (CONNECT_DATA = 
      (SERVICE_NAME = prod)
      (SERVER = POOLED)
    )
  )

4. 应用连接池

4.1 应用层

- 应用服务器
- 连接池
- 共享

4.2 OCI

- OCI Session Pooling
- 应用
- 性能

4.3 JDBC

- JDBC 连接池
- UCP
- 性能

5. 共享服务器

5.1 配置

ALTER SYSTEM SET shared_servers = 5;
ALTER SYSTEM SET max_shared_servers = 20;
ALTER SYSTEM SET dispatchers = '(PROTOCOL=TCP)(DISPATCHERS=3)';

5.2 使用

# tnsnames.ora
(SERVER = SHARED)

6. 比较

专用共享DRCP
资源
进程1:1N:MN:M
适合高负载idle 多多应用
配置简单

7. Session Pooling

7.1 应用层

- 应用连接池
- 会话共享
- 减少

7.2 数据库层

- DRCP
- 进程共享
- 减少

8. 性能

8.1 优势

- 连接开销减少
- 资源节省
- 并发

8.2 开销

- 池管理
- 等待
- 监控

8.3 优化

- 池大小
- 超时
- 监控

9. 监控

9.1 DRCP

SELECT * FROM dba_cpool_info;
SELECT * FROM v$cpool_conn_info;
SELECT * FROM v$cpool_stats;

9.2 共享服务器

SELECT * FROM v$shared_server;
SELECT * FROM v$dispatcher;
SELECT * FROM v$queue;

9.3 会话

SELECT count(*) FROM v$session;
SELECT server, count(*) FROM v$session GROUP BY server;

10. 应用场景

10.1 Web 应用

- 多用户
- 短连接
- DRCP

10.2 OLTP

- 高并发
- 连接池
- 性能

10.3 多租户

- 多应用
- DRCP
- 共享

11. 常见问题

11.1 ORA-56606

- DRCP 未启动
- 启动

11.2 连接拒绝

- 池满
- 调整

11.3 性能

- 池大小
- 监控
- 优化

12. 最佳实践

  1. DRCP:多应用
  2. 共享服务器:idle 多
  3. 专用:高负载
  4. 池大小:合理
  5. 监控:使用
  6. 超时:配置
  7. 测试:性能
  8. 应用池:配合
  9. 文档:配置
  10. 演练:定期

13. 参考资料

[1] Oracle Database Administrator’s Guide 19c, “Connection Pooling” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/