本文主要對連接池的配置參數,包括 ZDAL 參數、Druid 參數、DBCP 參數、C3P0 參數以及 JDBC 參數等進行介紹。
數據源配置參數
參數含義 | 說明 | ZDAL 參數 | Druid 參數 | DBCP 參數 | C3P0 參數 |
初始化連接數 | 連接池初始化時建立連接數。 | prefill=true 初始化到 minConn | initialSize(0) | initialSize(0) | initialPoolSize(3) |
最小連接數 | 最小可使用連接數,這個會讓連接池日常一直保留著這么多個鏈接。 | minConn(0) | minIdle(0) | minIdle(0) | minPoolSize(3) |
最大連接數 | 最大可使用連接數,超過這個連接池會拋連接池已滿異常。 | maxConn(10) | maxActive(8) | maxActive(8) | maxActive(8) |
鏈接空閑超時時間 | 設置鏈接空閑時間一段時間不用時,連接池主動斷開鏈接。MySQL 默認 8 小時斷開鏈接,主備切換時鏈接會變成臟連接。如果沒有這個機制,可能會導致請求失敗。云上 OceanBase SLB 超時時間 15 分鐘,可以將超時時間設置為 12 分鐘。 | idleTimeoutMinutes(30min) | minEvictableIdleTimeMillis(30min) | minEvictableIdleTimeMillis(30min) 需要設置 timeBetweenEvictionRunsMillis(-1) > 0 才會生效,該參數控制異步檢查周期 | maxIdleTime(0 表示不超時) |
連接池獲取鏈接的超時時間 | 如果設置太大的話,鏈接池滿了會導致應用響應太慢。 | blockingTimeoutMillis(500ms) | maxWait(-1 表示不超時) | maxWaitMillis(-1 表示不超時) | checkoutTimeout(0 表示不超時) |
連接獲取不釋放超時時間 | 超時這個時間的話,連接一直沒有放回連接池會被直接銷毀掉。可以防止連接泄露,但是會影響事務使用時間限制。 | 無 | removeAbandonedTimeoutMillis(300s) | removeAbandonedTimeout(300s) | 無 |
JDBC 配置參數
JDBC 重要的幾個參數,一定需要設置。均可以設置到連接池的 ConnectionProperties 中,或者 JdbcUrl 上。具體參數及其說明如下表所示。
參數 | 說明 | 默認值 |
socketTimeout | 網絡讀超時時間,如果不設置默認是 0,使用 OS 默認超時時間 | 5000ms |
connectTimeout | 鏈接建立超時時間,如果不設置默認是 0,使用 OS 默認超時時間 | 500ms |
連接池設置建議
管控臺日常的最小連接數保持兩個即可,具體根據業務并發及事務時間來調整。
設置連接空閑超時時間 ,推薦 30 分鐘。
MySQL 默認 8 小時連接主動斷開,客戶端無法感知,導致存在臟連接。連接池可以通過心跳、testOnBorrow 等機制來校驗連接是否存活,當超過這個時間連接沒有使用直接斷開。