首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 11g/12c/19c 連接池 (DRCP) 配置與調優實戰指南

     編輯:Oracle 資料庫相關知識

多系統共享資料庫時,連接池耗盡導致「ORA-12520: TNS:listener could not find available handler」頻發。本文詳解 Oracle Database Resident Connection Pool (DRCP) 的架構、核心包 DBMS_CONNECTION_POOL、關鍵參數調優與監控視圖。

架構認知

  • Oracle 單實例僅支援一個連接池:SYS_DEFAULT_CONNECTION_POOL
  • 管理接口統一在 DBMS_CONNECTION_POOL 包
  • 預設不自動啟動,需顯式調用 START_POOL

核心操作流程

1. 啟動連接池 (僅需一次)

EXEC DBMS_CONNECTION_POOL.START_POOL('SYS_DEFAULT_CONNECTION_POOL');

後續實例重啟會自動啟動(除非手動 STOP)。

2. 查看狀態

SELECT connection_pool, status FROM dba_cpool_info;
-- SYS_DEFAULT_CONNECTION_POOL  ACTIVE

3. 參數配置詳解

參數含義默認值調優建議
MINSIZE池中最小 Pooled Server 數4按基礎併發設定,如 10-20
MAXSIZE池中最大 Pooled Server 數40按峰值併發設定,如 100-200
INCRSIZE擴容步長2避免頻繁擴縮容,建議 5-10
SESSION_CACHED_CURSORS每 Server 緩存游標數20複雜應用可調大至 50-100
INACTIVITY_TIMEOUT空閒超時釋放 (秒)300OLTP 可縮短至 60-180
MAX_THINK_TIME客戶端持有無操作最大時間 (秒)30長事務應用需調大
MAX_USE_SESSIONServer 最大復用次數5000防內存洩漏,通常保持默認
MAX_LIFETIME_SESSIONServer 最大生存時間 (秒)3600定期回收資源,建議 1800-7200

4. 修改參數 (兩種方式)

-- 方式 1: ALTER_PARAM (單參數熱修改)
EXEC DBMS_CONNECTION_POOL.ALTER_PARAM('', 'MINSIZE', '10');
EXEC DBMS_CONNECTION_POOL.ALTER_PARAM('', 'MAXSIZE', '100');

-- 方式 2: CONFIGURE_POOL (批量重配置)
EXEC DBMS_CONNECTION_POOL.CONFIGURE_POOL(
  pool_name => 'SYS_DEFAULT_CONNECTION_POOL',
  minsize   => 10,
  maxsize   => 100,
  incrsize  => 5
);

注意:單池架構下 pool_name 可省略 (傳空串)。

5. 驗證生效

SELECT connection_pool, status, minsize, maxsize FROM dba_cpool_info;
-- SYS_DEFAULT_CONNECTION_POOL  ACTIVE  10  100

關鍵監控視圖

視圖用途
DBA_CPOOL_INFO池狀態、配置參數
V$CPOOL_STATS請求/命中/等待/溢出統計
V$CPOOL_CC_STATS連接類別級統計 (專用/共享)

應用端接入要求

  • JDBC:連接串添加 :POOLED 或屬性 oracle.net.CONNECTION_POOLING=true
  • OCI/OCCI:OCISessionGet 指定 OCI_SESSGET_SPOOL
  • DRCP 連接屬於共享服務器架構,應用需正確釋放 (close) 而非長期持有

常見誤區

  1. 以為可建立多個命名連接池 → 僅支援單一默認池
  2. 修改參數未生效 → 需 STOP_POOL → START_POOL 重啟 (部分參數熱修改除外)
  3. 混淆 DRCP (Server-side) 與客戶端連接池 (如 HikariCP/DBCP) → 兩者疊加效果最佳
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved