常用的資料庫連線池、設定引數及相應的調優方法

2023-06-26 21:00:34

資料庫連線池是一種用於管理和維護資料庫連線的技術,不同型別的資料庫連線池具體的設定引數和調優方法也是有所不同的。下面分別舉例 C3P0、DBCP、HikariCP 和 Druid 的常用設定資訊和調優建議:

C3P0

常用設定引數:

# 連線池中容許的最小連線數目
c3p0.minPoolSize=5
# 連線池中容許的最大連線數目
c3p0.maxPoolSize=50
# 連線池初始連線數
c3p0.initialPoolSize=10
# 連線池當中每次新建立的連線數目
c3p0.acquireIncrement=5
# 測試可用連線的查詢語句
c3p0.preferredTestQuery=SELECT 1
# 每隔多長時間檢查所有連線池中的空閒連線
c3p0.idleConnectionTestPeriod=60
# 連線池中連線存活的最長時間
c3p0.maxIdleTime=600
# 從連線池中取出連線的超時時間
c3p0.checkoutTimeout=5000
# 是否在從連線池中獲取連線時測試該連線是否有效
c3p0.testConnectionOnCheckout=true

調優建議:

  • 增加 maxPoolSize 可以提高並行量,但也會佔用更多的資源。
  • 減少 idleConnectionTestPeriod 可以避免因為空閒連線而導致的資源浪費。
  • 使用 c3p0.preferredTestQuery 設定自定義 SQL 測試語句可以提高效能。

DBCP

常用設定引數:

# 連線池初始連線數
dbcp.initialSize=5
# 連線池中容許的最大連線數目
dbcp.maxActive=20
# 連線池中容許的最小連線數目
dbcp.maxIdle=10
# 最長等待時間,單位毫秒,-1 表示無限等待
dbcp.maxWait=-1
# 借連線時是否進行有效性檢查
dbcp.testOnBorrow=true
# 歸還連線時是否進行有效性檢查
dbcp.testWhileIdle=true
# 多長時間檢查一次空閒連線,單位毫秒
dbcp.timeBetweenEvictionRunsMillis=1800000
# 每次檢查空閒連線的數量
dbcp.numTestsPerEvictionRun=3
# 空閒連線存活的最長時間,單位毫秒
dbcp.minEvictableIdleTimeMillis=1800000

調優建議:

  • 增加 maxTotal 可以提高並行量,但也會佔用更多的資源。
  • 減小 maxIdle 可以減少空閒連線佔用的資源。
  • 使用 testOnBorrow 和 testOnReturn 等測試機制可以提高連線質量和可靠性。

HikariCP

常用設定引數:

# 資料來源類名
hikari.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
# 連線池中容許的最大連線數目
hikari.maximumPoolSize=100
# 連線池中容許的最小連線數目
hikari.minimumIdle=10
# 連線池當中每次新建立的連線數目
hikari.connectionTimeout=30000
# 連線在池中的最大生存時間,單位毫秒
hikari.idleTimeout=60000
# 資料庫伺服器名稱
hikari.dataSource.serverName=localhost
# 資料庫埠號
hikari.dataSource.portNumber=3306
# 資料庫名稱
hikari.dataSource.databaseName=example
# 資料庫使用者名稱
hikari.dataSource.user=root
# 資料庫密碼
hikari.dataSource.password=root
# 連線池名稱
hikari.poolName=ExamplePool

調優建議:

  • 增加 maximumPoolSize 可以提高並行量,但也會佔用更多的資源。
  • 減小 idleTimeout 可以減少空閒連線佔用的資源。
  • 使用 cachePrepStmts 等引數可以提高效能和安全性。

Druid

常用設定引數:

# 連線池初始連線數
druid.initialSize=5
# 連線池中容許的最大連線數目
druid.maxActive=20
# 連線池中容許的最小連線數目
druid.minIdle=5
# 最長等待時間,單位毫秒
druid.maxWait=60000
# 多長時間檢查一次空閒連線,單位毫秒
druid.timeBetweenEvictionRunsMillis=300000
# 空閒連線存活的最長時間,單位毫秒
druid.minEvictableIdleTimeMillis=600000
# 是否在取連線前進行有效性檢查
druid.testWhileIdle=true
# 是否在歸還連線前進行有效性檢查
druid.testOnBorrow=false
# 是否在歸還連線時檢查連線的可用性
druid.testOnReturn=false
# 用於檢測連線是否有效的 SQL 查詢語句
druid.validationQuery=SELECT 'x'
# 連線池使用的過濾器鏈
druid.filters=stat,wall,log4j
# 是否開啟紀錄檔記錄功能
druid.logAbandoned=true

調優建議:

  • 增加 maxActive 可以提高並行量,但也會佔用更多的資源。
  • 減小 timeBetweenEvictionRunsMillis 和 minEvictableIdleTimeMillis 可以減少空閒連線佔用的資源。
  • 使用 testWhileIdle 和 validationQuery 等測試機制可以提高連線質量和可靠性。

需要注意的是,具體的設定引數和調優方法可能因資料庫的型別和版本、應用伺服器的使用情況等而異。為了獲得最佳的資料庫連線池效能和可靠性,我們需要結合實際需求進行選擇和優化,同時參考網際網路上的相關資料和經驗,不斷調整和完善連線池的設定。

在使用資料庫連線池時,還需要注意以下幾個問題:

1. 連線洩漏:當連線池中的連線沒有被釋放而一直佔用時,就會造成連線洩漏,從而導致系統崩潰。為了避免這種情況,需要在程式碼中明確地關閉連線。
2. 安全性:資料庫連線池中可能會存在密碼洩露等安全問題,因此需要使用 SSL 加密或者其他安全機制來保證資料的安全。
3. 監控和統計:要及時監控和統計資料庫連線池的狀態和效能指標,以便進行及時調整和優化。

總之,資料庫連線池是開發中不可或缺的技術之一。通過合理設定和調優,可以大幅度提升資料庫操作的效能和可靠性,從而為開發者和使用者帶來更好的體驗。