Hikari数据库连接池部分常用参数解析

概述

问题描述

在项目使用中,我们将原先部署在集群A的服务,因为信创改造,迁移到了新的容器集群。这个服务访问量较低,初期并未发现异常,但在经过一段时间后,服务会出现Communications link failureHikariPool-1 - Connection is not available, request timed out after 30099ms. 等获取连接超时,连接失败的情况出现。重启后能够恢复,但过一段时间又会复现,且无法自动恢复正常。

基本概念

Hikari是一个开源的流行数据库连接池,Hikari是日语ひかり 意思是"光"。它配置简单,提供丰富的功能,已经是在比较新的Springboot中默认引入的连接池。

参数解析

hikari版本为4.0.3,mysql-connector版本为8.0.28

minimum-idle

最小空闲连接数。即连接池中保持存活的最小空闲连接数,正常依据业务情况配置,需要注意的是,数据库端接收的连接总数,是部署启动的所有实例上连接数的总和。

Maximum-pool-size

连接池最大连接数。即单个实例中连接池可建立的数据库连接的上限。当连接不够时,连接池自动扩容,直到达到最大的上限。

Connection-timeout

等待连接池分配连接的最大时长,单位毫秒,默认是30秒。即从连接池中获取连接的超时阈值,如果必要可以设置短一点,避免异常情况获取耗时过长,阻塞流程。

Connection-test-query

检测连接是否有效的SQL,只有配置了才会执行。实际执行在PoolBase 下的 isConnectionAlive 方法中。

注意可以配置为 /* ping */ select 1/* ping */ 被称作 PING_MARKER。 不会做SQL执行,反而用Ping命令代替,实际执行在 jdbc 的StatementImpldoPingInstead()方法。

Max-lifetime

连接池中连接最长存在时间,默认是30分钟。当超过这个时间以后,连接池对这个连接会释放关闭,再重新创建连接。这个是我们解决本次连接异常的核心参数,后面会详细解析。

idle-timeout

回收闲置连接的时间,默认10分钟,当连接池中连接超过minimum-idle的时候,同时有连接没有再使用,则会在idle-timeout之后进行回收,最终保持到minimum-idle 的连接数量。

问题解析

由于我们迁移了集群,新的集群出现了会切断数据库连接的情况,时间大概在25分钟左右。而我们配置的Max-lifetime采用默认值30分钟,因此,过了一段时间之后,连接被动断开,拿到的都是异常的连接。 而最开始的minimum-idle 、Connection-timeout 都配置比较大,反而导致无法及时重新连接获取到正常的连接。

因此做了如下的调整:

  • 重点:设置max-lifetime ,减少为15分钟,让所有连接生命周期都保持在15分钟内,避免网络异常而断开。

  • 减小minimum-idle,依据业务量仅保持必要的数据库连接。

  • 设置idle-time,减少为5分钟,回收闲置连接。

  • 设置connection-test-query 为 /* ping */ select 1 ,增加对连接的探活。

  • 其他:jdbc 连接串增加 autoReconnect=true 参数,暂未实际验证到其效果和机制。

在设置max-lifetime为15分钟后,如下图可以从MySQL端看到对应的连接时间不会超过15分钟,即900秒。

相关推荐
念何架构之路16 小时前
Go进阶之panic
开发语言·后端·golang
先跑起来再说16 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
码农阿豪16 小时前
Flask应用上下文问题解析与解决方案:从错误日志到完美修复
后端·python·flask
威迪斯特16 小时前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
毕设源码-钟学长17 小时前
【开题答辩全过程】以 基于Springboot的扶贫众筹平台为例,包含答辩的问题和答案
java·spring boot·后端
程序员良许17 小时前
三极管推挽输出电路分析
后端·嵌入式
Java水解18 小时前
【JAVA 进阶】Spring AOP核心原理:JDK与CGLib动态代理实战解析
后端·spring
Java水解18 小时前
Spring Boot 4 升级指南:告别RestTemplate,拥抱现代HTTP客户端
spring boot·后端
宫水三叶的刷题日记18 小时前
工商银行今年的年终奖。。
后端
大黄评测18 小时前
双库协同,各取所长:.NET Core 中 PostgreSQL 与 SQLite 的优雅融合实战
后端