使用HikariCP连接池常用配置讲解及注意事项

news2024/11/16 19:55:31

使用HikariCP连接池常用配置讲解及注意事项

  • 常遇到的几种错误
    • Possibly consider using a shorter maxLifetime value
    • Connection is not available, request timed out after xxxxxms
    • No operations allowed after connection closed
  • 常见配置及注释说明,可以使用并根据说明调整
  • 详细分析
    • 首先确认网络问题
    • maximum-pool-size建议值
    • minimum-idle
    • idle-timeout
    • max-lifetime
    • connection-timeout
    • validation-timeout
    • connection-test-query

常遇到的几种错误

Possibly consider using a shorter maxLifetime value

SpringCloud 中使用HikariPool 报错Possibly consider using a shorter maxLifetime value

HikariPool-1 - Failed to validate connection 
com.mysql.cj.jdbc.ConnectionImpl@115a8473 (No operations allowed after connection closed.). 
Possibly consider using a shorter maxLifetime value

Connection is not available, request timed out after xxxxxms

Connection is not available, request timed out after 59089ms

No operations allowed after connection closed

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed

对于以上几种错误,我经过查阅,众说纷纭,大部分解决了的都是(并不是长久之计)

  • 按照提示缩短了maxLifetime到5分钟
  • 增加测试查询语句connection-test-query

来解决问题,并没有实际的分析问题根源或者优化其他配置项,经过查询相关文档、尝试、观察、测试,得出以下结论,给大家讲解,急于处理问题的可以参考下面的配置进行调整,注意标明的注释,可做适当调整,后文我将对常用的配置项进行讲解

常见配置及注释说明,可以使用并根据说明调整

spring:
  datasource:
    hikari: # 时间单位均为ms
      minimum-idle: 5 # 建议不设置,但如使用idle-timeout,该值需要小于maximum-pool-size
      maximum-pool-size: 10 # hikari做过测试根据CPU计算最优最大连接池,如下
      # connections = ((cpu_core_count * 2) + effective_spindle_count)
      # 如4-Core i7,公式为9 = ((4 * 2) + 1),最后一个是有效的主核心数
      auto-commit: true # 默认
      idle-timeout: 300000 # 该值建议小于max-lifetime
      max-lifetime: 600000 # 该值建议小于数据库的连接关闭等待时间,详细的看下面分析
      connection-timeout: 30000 # 默认30s,连接超时会报异常
      # Connection is not avaitabte, request timed out after 59089ms
      validation-timeout: 5000 # 支持JDBC4的是isValid超时时间,不支持的是testQuery超时时间
      connection-test-query: 'SELECT 1' # 支持JDBC4的不建议使用,因为JDBC4的isValid方法效率更高

详细分析

HikariCP官方说明文档

首先确认网络问题

将数据库连接到本地(注意需要保持数据库的配置和线上一致,否则没有可比性,无法得出结论),并进行长时间运行测试,如果没有问题,则是由于网络原因链接超时,造成了关闭的连接本地调用失败、或创建连接超时无法使用,这种情况优化网络配置、增加带宽、将服务和数据库部署在同一网络下等方案即可

maximum-pool-size建议值

HikariCP对Pool-Sizing的论证及建议

hikari做过测试根据CPU计算最优最大连接池,详细的可以看链接的官方讲解,比较长,总结如下

  • connections = ((cpu_core_count * 2) + effective_spindle_count)
  • 如4-Core i7,公式为9 = ((4 * 2) + 1),最后一个是有效的主核心数

minimum-idle

该值HikariCP建议不设置,就使用默认的,也就是同maximum-pool-size一边大,但是实际应用中可能需要保留少一些,随着业务的增加变到maximum-pool-size,而不是长期占用maximum-pool-size这么多的连接数。

  • 所以可以设置一个比较小的、或者常态化下使用的连接量即可,建议5-10即可,不可大于maximum-pool-size

idle-timeout

连接允许在池中闲置的最长时间,默认为600000,即10分钟。只有当minimum-idle小于maximum-pool-size时,这个参数才生效,当空闲连接数超过minimum-idle,而且连接空闲时间超过idle-timeout,则会被移除。

  • 设置时,该值建议小于max-lifetime

max-lifetime

官方建议是比数据库的wait_timeout小几秒,但是MySQL默认一般都是8小时,28800s(数据库单位是s秒),如下图

# 查看数据库的wait_timeout、interactive_timeout
show variables like '%timeout%';

在这里插入图片描述
所以设置有几种方式

  • 根据数据的超时时长,减少一些时间,然后变为毫秒数,配置该值
  • 使用默认值
  • 使用小于默认值的,如5分钟、10分钟、15分钟等

但是该值一定要大于idle-timeout

connection-timeout

连接池等待连接的最大毫秒数,默认为30000ms,也就是30s,允许最小时间是250毫秒,如果小于250毫秒,则被重置回30秒。

  • 根据网络情况,处理器性能,服务可接受超时时长,配置合理的值即可
  • 一般设置短一点,提高程序的响应速度,但是要大于网络的平均响应时长,否则全会连接超时
  • 小于idle-timeout
# 出现这种错误一般就是连接超时了,检查网络响应时间、网络状态等
Connection is not avaitabte, request timed out after 59089ms

validation-timeout

支持JDBC4的驱动,是调用isValid验证连接池中连接有效性的超时时间
不支持JDBC4的驱动,是调用testQuery的超时时间

  • 该值尽量小一些,使用默认值即可,但是要小于connection-timeout

connection-test-query

支持JDBC4的不建议使用,因为JDBC4的驱动有isValid方法,是通过发送数据包验证连接,效率更高
不支持JDBC4的驱动,是执行该配置的SQL,比较重,效率不好

  • 如果没有配置该值,而且驱动不支持JDBC4,会有错误提示,所以没有配置,也没有提示isValid相关错误,即表示支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日刷题2——指针概念

更新不易,麻烦多多点赞,欢迎你的提问,感谢你的转发, 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我…

Twins: Revisiting the Design of Spatial Attention in Vision Transformers

Twins: Revisiting the Design of Spatial Attention in Vision Transformers一、引言二、Twins-PCPVT三、Twins-SVT四、实验五、消融实验文章链接: https://arxiv.org/abs/2104.13840代码链接: https://github.com/Meituan-AutoML/Twins一、引言 在本文中,重新审…

基于Matlab计算经典CFAR阈值

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

基于开源 PolarDB-X 打造中正智能身份认证业务数据基座

一、公司及业务介绍 中正智能是全球领先的生物识别和身份认证公司之一。我们曾负责公安部指纹算法国家标准的起草、编写,具备从算法、终端、平台、设计、生产、交付全域自研的能力,拥有多项自主知识产权的产品,并积极与高校合作开展基础研发。…

【Rust 指南】并发编程|无畏并发的原因

文章目录前言1、线程1.1、通过 spawn 创建新线程1.2、join 方法2、move 强制所有权迁移3、使用消息传递跨线程传递数据3.1、Send 方法3.2 、Sync 方法前言 安全高效的处理并发是 Rust 诞生的目的之一,主要解决的是服务器高负载承受能力。 并发(concurren…

石家庄正定县恢复种植 国稻种芯·中国水稻节:河北绘就画卷

石家庄正定县恢复种植 国稻种芯中国水稻节:河北绘就画卷 新华社记者 杨世尧 摄 河北日报 通讯员张 晓峰 摄影报道 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健康大会…

MongoDB备份与恢复

MongoDB备份与恢复 文章目录MongoDB备份与恢复1.备份恢复工具2.备份工具区别3.mongoexport导出工具命令4.导出MongoDB的表4.1.创建备份的目录4.2.登录数据库4.3.查询表和表中数据4.4.导出数据为json格式4.5.导出数据为csv格式5.mongoimport导入工具5.1.恢复json格式数据5.2.登录…

Python基础-3-列表

一:简述 列表是由一系列按特定顺序排列的元素组成,可以创建包含字母表中所有字母,数字或家庭成员姓名的列表;也可以将任何东西加入列表,其中的元素之间可以没有任何关系。列表中通常包含了多个元素,因此给…

HTTPS中间人攻击实验

HTTPS中间人攻击实验 一.实验基础 1、HTTPS概述 HTTPS (全称: Hyper Text Transfer Protocol over SecureSocketLayer), 是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。 默认端口:443 SSLspli…

【无人机】基于拓展卡尔曼滤波时序四旋翼无人机状态跟踪附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

SpringBoot+Vue项目实现疫情期间社区出入管理系统

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

web前端期末大作业——基于Bootstrap响应式汽车经销商4S店官网21页

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【prometheus上报和使用】

prometheus上报和使用prometheus环境搭建进行上报CountrateirateincreaseGaugehistogram分位线summaryprometheus Prometheus是由SoundCloud开发的开源监控系统,由GO语言编写而成,采用Pull的方式来获取监控信息,并且提供了多维度的数据模型和…

Linux-sed

sed sed是一种几乎包括所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要用来将数据进行选取、替换、删除、新增的命令 sed [选项] ‘[动作]’ 文件名 选项: -n:一般sed命令会把所有数据都输出到屏幕,如果加入此选项…

vue.js毕业设计,基于vue.js前后端分离订座预约系统设计与实现(H5移动项目)

功能介绍 【后台功能】 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信息,支持删除 录入资讯:录入资讯标题、内容等信息 管理资讯&#x…

HTTP Only下的XSS攻击

今天继续给大家介绍渗透测试相关知识,本文主要内容是HTTP Only下的XSS攻击。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授权…

程序猿成长之路之密码学篇-密码学简介

在阅读本文前需要了解的术语: 授权人/非授权人:授权人指获取了查看数据权限的用户,非授权人则是指未获取到权限的用户。明文/密文:明文指没有加密的数据内容,密文是指加密后的数据内容CIA(密码学中不是美国中情局的意思…

npm 如何更新项目最新依赖包

NPM 是什么? Node 软件包管理器(NPM)提供了各种功能来帮助你安装和维护项目的依赖关系。 由于错误修复、新功能和其他更新,依赖关系可能会随着时间的推移而变得过时。你的项目依赖越多,就越难跟上这些更新。 老旧的软件包会对安全构成威胁&am…

USB-数据传输

一、USB编码-反向不归零编码(NRZI)位填充 规则:数据为0,电平反转,数据为1,电平不翻转;当连续出现6个相同的1穿插一个0,目的是为了防止连续出现多个1导致的同步漂移。 二、USB传输帧 帧是USB传输的时间单位&#xff0…

深入浅出PyTorc——进阶训练技巧

1. 自定义损失函数 1.1 以函数方式定义 手动写出损失的公式并用函数进行存储,方便调用。 def my_loss(output, target):loss torch.mean((output - target)**2)return loss 1.2 以类方式定义 1.2.1 损失函数的继承关系 (1)Loss函数部分继…