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

这篇具有很好参考价值的文章主要介绍了使用HikariCP连接池常用配置讲解及注意事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常遇到的几种错误

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%';

validationtimeout,学习笔记,mysql,数据库,java,spring
所以设置有几种方式

  • 根据数据的超时时长,减少一些时间,然后变为毫秒数,配置该值
  • 使用默认值
  • 使用小于默认值的,如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,比较重,效率不好文章来源地址https://www.toymoban.com/news/detail-616551.html

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

到了这里,关于使用HikariCP连接池常用配置讲解及注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32使用STM32CUBEMX配置FreeRTOS+SDIO4bit+FATFS注意事项

    以STM32F429为例: 1、SDIO配置 配置为4bit模式,此配置不是最终配置,后面会在代码进行修改。 2、Fatfs配置 Set Defines 选项中的配置可以默认,最重要注意Advanced Setting 选择中的配置,如下 该界面配置默认Use dma template是默认使能的 ,并且不可以选择,只能选择使能,所以需要使

    2024年02月11日
    浏览(60)
  • FPGA-常用电平标准介绍、LVDS供电注意事项

    电平标准等事项,做个笔记 三极管单端输出 如串口模块:USB转TTL;FPGA板子上的 I/O口电平标准。 只有几十MHz,工程中基本不用了。 单端:信号由一根导线输出,+5/3.3V为高电平,0为低电平。 MOS管单端输出,功耗低,翻转快。 工程实际一般适用于小于200MHz或者小于150MHz LVDS是

    2024年02月21日
    浏览(53)
  • AD9910模块高速DDS模块、功能性能讲解、开发调试注意事项、代码详解、电子设计大赛DDS

    AD9910是一款内置14 bit DAC的直接数字频率合成器(DDS),支持高达1GSPS的采样速率。AD9910采用高级DDS技术,在不牺牲性能的前提下可极大降低功耗。DDS/DAC组合构成数字可编程的高频模拟输出频率合成器,能够在高达400MHz的频率下生成频率捷变正弦波形。 用户可以访同三个用于控制

    2024年02月16日
    浏览(54)
  • Linux ping命令教程:如何检查网络连接状况(附案例详解和注意事项)

    Ping(Packet Internet Groper)命令用于检测主机。通过发送Internet控制消息协议( ICMP )Echo数据包到目标主机,检测目标主机是否可达。如果互联网上两个主机之间可以通信,并且没有防火墙阻止这种通信,那么ping命令在一个主机上可以成功地ping另一个主机。因此,你可以使用pin

    2024年01月25日
    浏览(59)
  • vscode配置与注意事项

    中文设置 https://zhuanlan.zhihu.com/p/263036716 应用搜索输入“Chinese (Simplified) Language Pack for Visual Studio Code”并敲回车键 底部信息窗没有的话 将下面的选项改为true \\\"workbench.statusBar.visible\\\": true 组件:在VS Code中开发React常用插件_js jsx snippets-CSDN博客 1、VScode 路径自动补全插件: Path A

    2024年01月21日
    浏览(65)
  • Spring Boot 2.7.5 HikariCP 连接池多数据源配置

    当前项目遇到需要连接多个数据库的场景,此时需要引入多数据源了. 还有一些诸如以下的场景: 与第三方对接时,有些合作方并不会为了你的某些需求而给你开发一个功能,他们可以提供给你一个可以访问数据源的只读账号,你需要获取什么数据由你自己进行逻辑处理,这时

    2024年02月05日
    浏览(50)
  • SpringBoot整合(五)HikariCP、Druid数据库连接池—多数据源配置

    在项目中,数据库连接池基本是必不可少的组件。在目前数据库连接池的选型中,主要是 Druid ,为 监控 而生的数据库连接池。 HikariCP ,号称 性能 最好的数据库连接池。 在Spring Boot 2.X 版本,默认采用 HikariCP 连接池。而阿里大规模采用 Druid 。下面介绍在SpringBoot中使用Hika

    2024年02月17日
    浏览(79)
  • 岩土工程安全监测中振弦采集仪连接振弦传感器时注意事项

    岩土工程安全监测中振弦采集仪连接振弦传感器时注意事项 岩土工程安全监测是保障工程稳定和安全的重要手段之一,而振弦采集仪则是岩土工程安全监测的常用设备之一,可以用于实时监测地下水位、土体变形、岩体应力等。其中,振弦传感器是振弦采集仪的核心部件之一

    2024年02月08日
    浏览(64)
  • Linux telnet命令详解:通过TCP/IP网络连接与管理远程机器(附实例教程和注意事项)

    telnet 命令,全称为teletype network,是一个使用telnet网络协议来连接并管理远程机器的命令。它通过TCP/IP网络使用端口23来建立连接,并提供了一种使用命令行界面(CLI)管理远程系统的方式。虽然 telnet 与SSH相似,但两者有所不同,因为SSH使用了加密,而 telnet 则是以明文形式

    2024年02月04日
    浏览(50)
  • 小程序配置服务器域名:步骤与注意事项

    随着移动互联网的普及,小程序已成为许多企业和开发者的首选应用形式。为了确保小程序的正常运行和最佳用户体验,服务器域名的配置至关重要。本文将详细介绍小程序配置服务器域名的步骤及注意事项。 一、为什么要配置服务器域名? 小程序运行需要后端服务器的支

    2024年02月21日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包