程序员的资源宝库

网站首页 > gitee 正文

HikariCP连接池设置和监控(hikari连接池经常连接超时)

sanyeah 2024-04-01 11:28:36 gitee 4 ℃ 0 评论

调整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 监控指标.

一般情况下, 只要监控看两个指标就足够了:

  1. 如果 hikaricp.connections.pending 指标经常性大于0, 说明poolSize偏小了. 2
  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 的配置参数

摘自 <https://www.cnblogs.com/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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表