Oracle Connection Pooling 详解
Oracle Connection Pooling 详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Connection Pooling 连接池减少连接开销[1]:
详细见:Oracle 连接池与 DRCP、Oracle 共享服务器架构。
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:1 | N:M | N: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. 最佳实践
- DRCP:多应用
- 共享服务器:idle 多
- 专用:高负载
- 池大小:合理
- 监控:使用
- 超时:配置
- 测试:性能
- 应用池:配合
- 文档:配置
- 演练:定期
13. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Connection Pooling” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/