HikariCP重要參數配置
- 2019 年 10 月 18 日
- 筆記
概述
HikariCP是Spring Framework 5.0的默認資料庫連接池,這得益於他的高性能。但是如果配置不當,資料庫連接池也可能因影響到系統性能。
重要參數
- maximum-pool-size
- minimum-idle
- pool-name
- auto-commit
- idle-timeout
- max-lifetime
- connection-timeout
初始化過程和連接創建邏輯
當HikariCP初始化時候,會將添加連接到池中,直到達到minimum-idle的數量,此時保持這個狀態。當有新的連接池請求時,HikariCP會返回一個connection的代理。當connection都處於使用狀態時,若此時有新的連接池請求,HikariCP就會繼續新建connection直到達到maximun-pool-size。
maximum-pool-size
池中最大連接數(包括空閑和正在使用的連接)。默認值是10,這個一般預估應用的最大連接數,後期根據監測得到一個最大值的一個平均值。要知道,最大連接並不是越多越好,一個connection會佔用系統的頻寬和存儲。但是 當連接池沒有空閑連接並且已經到達最大值,新來的連接池請求(HikariPool#getConnection)會被阻塞直到connectionTimeout
(毫秒),超時後便拋出SQLException。
minimum-idle
池中最小空閑連接數量。默認值10,小於池中最大連接數,一般根據系統大部分情況下的資料庫連接情況取一個平均值。Hikari會儘可能、儘快地將空閑連接數維持在這個數量上。如果為了獲得最佳性能和對峰值需求的響應能力,我們也不妨讓他和最大連接數保持一致,使得HikariCP成為一個固定大小的資料庫連接池。
pool-name
連接池的名字。一般會出現在日誌和JMX控制台中。默認值:auto-genenrated。建議取一個合適的名字,便於監控。
auto-commit
是否自動提交池中返回的連接。默認值為true。一般是有必要自動提交上一個連接中的事物的。如果為false,那麼就需要應用層手動提交事物。
idle-timeout
空閑時間。僅在minimum-idle小於maximum-poop-size的時候才會起作用。默認值10分鐘。根據應用實際情況做調整,對於一些間歇性流量達到峰值的應用,一般需要考慮設置的比間歇時間更大,防止創建資料庫連接拖慢了應用速度。
max-lifetime
連接池中連接的最大生命周期。當連接一致處於閑置狀態時,資料庫可能會主動斷開連接。為了防止大量的同一時間處於空閑連接因為資料庫方的閑置超時策略斷開連接(可以理解為連接雪崩),一般將這個值設置的比資料庫的「閑置超時時間」小几秒,以便這些連接斷開後,HikariCP能迅速的創建新一輪的連接。
connection-timeout
連接超時時間。默認值為30s,可以接收的最小超時時間為250ms。但是連接池請求也可以自定義超時時間(com.zaxxer.hikari.pool.HikariPool#getConnection(long))。