HikariCP連接池設置和監控
調整pool參數
SpringBoot 項目默認自動使用 HikariCP, 最近為了進行數據庫session控制, 特意調小了缺省的 poolSize, 原本以為會自動生效, 經過壓測發現還是使用默認的 poolSize.
原來的代碼 DataSource 對象使用的是 Spring DataSource builder創建的, 需要修改為 HikariDataSource 來創建.
我直接使用 https://blog.csdn.net/abu935009066/article/details/127155653 文章中的代碼.
監控 HikariCP
我們需要監控到數據庫連接池設置是否合理, 所以需要有手段能監控到連接池對應的指標, HikariCP 提供了 LoggingMeterRegistry 是一個非常好的監控手段, 將指標輸出日志, 便于長期分析.
具體使用參考 https://blog.csdn.net/abu935009066/article/details/127155653
HikariCP 監控指標.
一般情況下, 只要監控看兩個指標就足夠了:
- 如果 hikaricp.connections.pending 指標經常性大于0, 說明poolSize偏小了. 2
- 如果 hikaricp.connections.idle 指標非常接近 poolSize, 說明poolSize偏大了.
指標 詳解
hikaricp.connections 當前總連接數,包括空閑的連接和使用中的連接。(4 = 3 + 1)對應上面日志;
Connections = activeConnection + idleConnections,會隨著連接使用情況變化。
hikaricp.connections.active 正在使用中活躍連接數 (1),會隨著連接使用情況變化。
hikaricp.connections.idle 空閑連接數 (3) ,會隨著連接使用情況變化。
hikaricp.connections.max 最大連接數 (10),初始配置。
hikaricp.connections.min 最小連接數 (3),初始配置。
hikaricp.connections.pending 正在等待連接的線程數量(0)。重點:一般來說,這里應該都是0,如果存在這個數據并且時間較長要觸發告警,視情況加大最大連接數。
hikaricp.connections.acquire 獲取每個連接需要時間,單位為ns。
hikaricp.connections.creation 連接創建時間,單位為ms。
hikaricp.connections.timeout 創建連接超時次數。
hikaricp.connections.usage 連接從池中取出到返回的時間,單位為ms。即連接被業務占用時間(3.017s)。重點:這個時間長的話,
可能是慢SQL或者長事務導致連接被占用問題。
HikariCP 的配置參數
摘自 <http://www.rzrgm.cn/coderaniu/p/15185579.html
# 不同數據源這四個配置都會用到
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#以下的配置項是hikari特有的配置
# 等待連接池分配連接的最大時長(毫秒),超過這個時長還沒可用的連接則發生SQLException, 默認:30秒
spring.datasource.hikari.connection-timeout=30000
# 最小連接數
spring.datasource.hikari.minimum-idle=5
# 最大連接數
spring.datasource.hikari.maximum-pool-size=15
# 自動提交
spring.datasource.hikari.auto-commit=true
# 一個連接idle狀態的最大時長(毫秒),超時則被釋放(retired),默認:10分鐘
spring.datasource.hikari.idle-timeout=600000
# 連接池名字
spring.datasource.hikari.pool-name=DatebookHikariCP
# 一個連接的生命時長(毫秒),超時而且沒被使用則被釋放(retired),默認:30分鐘 1800000ms,建議設置比數據庫超時時長少60秒
spring.datasource.hikari.max-lifetime=28740000
spring.datasource.hikari.connection-test-query=SELECT 1
#以下是針對MYSQL驅動的配置參數
# 在每個連接中緩存的語句的數量。默認值為保守值25。建議將其設置為250-500之間
spring.datasource.hikari.prepStmtCacheSize = 300
# 緩存的已準備SQL語句的最大長度,默認值是256,但是往往這個長度不夠用
spring.datasource.hikari.prepStmtCacheSqlLimit = 2048
# 緩存開關,如果這里設置為false,上面兩個參數都不生效
spring.datasource.hikari.cachePrepStmts = true
#較新版本的 MySQL 支持服務器端準備好的語句,這可以提供實質性的性能提升
spring.datasource.hikari.useServerPrepStmts = true

浙公網安備 33010602011771號