当前位置 : 首页 » 文章分类 :  开发  »  HikariCP

HikariCP

Hikari 光 数据库连接池 笔记

brettwooldridge/HikariCP
https://github.com/brettwooldridge/HikariCP

Spring Boot 在 2.0 版本中把 HikariCP 作为其默认的 JDBC 连接池。

Springboot 2.0选择HikariCP作为默认数据库连接池的五大理由
http://blog.didispace.com/Springboot-2-0-HikariCP-default-reason/


查看 Hikari 连接池状态

只看 hikari 连接池状态可以只开 HikariPool 的debug日志
直接编辑 logback.xml

<logger name="com.zaxxer.hikari.pool.HikariPool" level="debug"/>

或修改 spring 配置

logging:
    com:
      zaxxer:
        hikari: debug

可看到日志

2022-07-20 12:45:10.622 [http-nio-8181-exec-123] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Timeout failure stats (total=100, active=100, idle=0, waiting=49) 
2022-07-20 12:45:13.965 [HikariPool-1 housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Pool stats (total=100, active=100, idle=0, waiting=49) 

【问题记录】HikariCP 连接池线上问题排查
https://juejin.cn/post/6923116045712490510


Hikari 数据库连接池配置

【追光者系列】Hikari连接池大小多大合适?(第一弹)
https://juejin.im/post/5ad44c9b6fb9a028d70112e0

【追光者系列】Hikari连接池大小多大合适?(第二弹)
https://juejin.im/post/5ad44d716fb9a028bd4cc8f7

Hikari 的所有时间配置项单位都是毫秒

connectionTimeout:30000(30秒)

从连接池获取可用连接的超时时间,如果超过此时间而没有获取可用的连接,则会抛出 SQLException。
可设置的最小值为 250 ms,默认值 30000 ms(30秒)
假如此时间内没有获取到可用连接则抛出异常:
java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.

maximumPoolSize:10

连接池中最大连接数,包括闲置和使用中的连接,默认值 10
当连接池达到最大连接数时,调用 getConnection() 方法会阻塞最多 connectionTimeout 毫秒,然后抛出异常。

maxLifetime:1800000(30分钟)

连接池中连接的最长生命周期。
使用中的连接永远不会过期,只有空闲的连接会过期并被删除。
强烈建议设置此参数,并且必须小于底层数据库的连接超时时间(比如 MySQL 的 wait_timeout 默认8小时)。
设为 0 表示永不过期,取决于 idleTimeout 配置项
允许设置的最小值是 30000ms,默认值 1800000ms(30分钟)

minimumIdle

最小空闲连接数,默认值等于 maximumPoolSize

idleTimeout:600000(10分钟)

连接允许在池中闲置的最长时间,只有当 minimumIdle 被显式设置的小于 maximumPoolSize 时才生效。
当连接池中空闲连接数缩减到 minimumIdle 后,就不再减少空闲连接。
设置为 0 表示空闲连接永不过期,允许设置的最小值是 10000ms,默认值 600000ms(10分钟)


问题

No operations allowed after connection closed

2022-10-31 18:08:12.490 [http-nio-8181-exec-5] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection com.mysql.jdbc.JDBC4Connection@7024d7c3 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.

com.zaxxer.hikari.pool.PoolBase 类


CannotGetJdbcConnectionException

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
### The error may exist in com/common/mapper/BaseAccountInfoMapper.java (best guess)
### The error may involve com.common.mapper.BaseAccountInfoMapper.queryUserIdByAccountId
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
        at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:79) ~[mybatis-spring-1.3.0.jar!/:1.3.0]
        at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447) ~[mybatis-spring-1.3.0.jar!/:1.3.0]
        at com.sun.proxy.$Proxy130.selectOne(Unknown Source) ~[?:?]
        at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:167) ~[mybatis-spring-1.3.0.jar!/:1.3.0]
        at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75) ~[mybatis-3.4.0.jar!/:3.4.0]
        at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53) ~[mybatis-3.4.0.jar!/:3.4.0]
        at com.sun.proxy.$Proxy137.queryUserIdByAccountId(Unknown Source) ~[?:?]

原因是 hikari 连接池中连接都已被占用,获取不到可用的 jdbc 连接,等待一段时间后超时。


上一篇 Vue

下一篇 Raft分布式一致性算法

阅读
评论
936
阅读预计4分钟
创建日期 2019-05-21
修改日期 2022-10-31
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论