项目中的一个批处理程序,需要长时间与数据库保持连接,属于典型的“写多读少”场景。监控的结果发现程序前8小时性能很好,之后就开始衰减。

用 show full process list 检查数据库连接情况发现:

网上查询后发现与HikariCP的配置参数有关,有几个参数配置不对,其中最关键的maxLifetime参数没有配置,当然保险起见keep-alive也一起配置最好。以下内容是从网上的一篇文章中摘抄下来的,原文链接为(CSDN博主「elegent Developer」的原创文章):1. HikariCP连接池优化配置小结_elegent Developer的博客-CSDN博客_hikaricp配置优化

以下为摘录的有参考价值的内容:

频繁使用的属性(Frequently used)
1. autoCommit
这个属性控制连接返回池中前auto-commit是否自动进行。缺省:true。
最佳实践:不需要配置,保持缺省即可。

2. connectionTimeout
控制一个客户端等待从池中获取连接的最大时间。超过该时间还获取不到连接则抛出SQLException,最低可设置的时间是250ms,缺省:30000ms

最佳实践:非特殊业务场景保持缺省30s连接超时即可。

3. idleTimeout
控制空闲连接的在池中最大的空闲时间。注意:这个配置只有当配置了minimumIdle属性(表示允许的最小空闲连接数),且比maximumPoolSize(表示池中允许的最大连接数)更小时才生效。 这个比较好理解:当前池中有空闲连接且比允许的最小空闲连接多时,根据空闲超时时间来逐出。

Spring Boot如何使用HikariCP连接池详解
pdf

0星
超过10%的资源
56KB

下载
当配置为0时表示空闲连接永远不逐出。
缺省:600000ms
最小生效值:10000ms

连接池会定时轮询检测哪些连接是空闲,并且空闲达到了idleTimeout配置的时间,但轮询间隔有时间差,一个空闲连接最大可空闲idleTimeout + 30s会逐出,平均是:idleTimeout + 15s。

最佳实践:不设置该属性和minimumIdle属性,保持连接池固定的连接

4. keepaliveTime
用于跟数据库保持心跳连接,防止底层网络基础设施超时断开,定期验证连接的有效性。这个参数需要设置的比maxLifetime(连接最大生存时间,下文会介绍)小。只会对池中空闲连接发生keeplive,具体执行细节是:
从池中取出一个连接,执行“ping”,成功后再放回。
ping:
如果当前支持JDBC4 , 通过调用isValid()方法实现
否则执行connectionTestQuery属性(下文会介绍)指定的sql

这个参数配置后连接池会定期检测连接有效性,检测过程中连接短暂从池中移出,不过不用担心,耗时非常短(几ms甚至更短)

缺省:0, 即不开启
最小可配置:30000ms ,即30秒

最佳实践: 需要设置, 可设置为60000, 即1分钟心跳一次

5. maxLifetime
该属性用于控制连接在池中的最大生存时间,超过该时间强制逐出,连接池向数据申请新的连接进行补充。注意:当前正在使用的连接不会强制逐出,哪怕它的累计时间已经到了maxLifetime。

强烈建议设置该属性,可设置的比数据库或网络基础设施允许的最大连接时间小一些。 如数据库连接最大失效时间是8小时,可设置为4小时。

缺省:1800000, 即30min
最小可配置:30000,即30s

最佳实践:需要设置,根据数据库或网络基础设施的情况,比它们小一些

7. connectionTestQuery
如果当前连接驱动支持JDBC4, 强烈不建议设置此属性。因为该属性的设置是为了支持keepalive检测,只有当JDBC4的isValid不可用时才使用connectionTestQuery配置的sql进行检测;或者当从池中获取连接时检测连接是否有效

缺省:none

常用四大连接池集合
rar

0星
超过10%的资源
6.03MB

下载
最佳实践:驱动支持JDBC4不需要设置,反之需要配置,MYSQL: select 1; Oracle: select 1 from dual

8. minimumIdle
配置连接池最小空闲连接数。为了性能最优化和为了应对高峰请求的快速响应强烈不建议设置该属性,让HikariCP连接池保持固定大小。
缺省:跟maximumPoolSize相同

最佳实践:保持缺省,让连接池固定大小,避免扩缩容带来的性能影响

9. maximumPoolSize
配置允许连接池达到的最大连接数(包括空闲和正在使用的),当池中连接达到maximumPoolSize,且都不空闲,当有新请求从池中申请连接池会阻塞等待可用连接,达到connectionTimeout还不能申请成功,则抛出SQLException。

缺省:10

最佳实践:根据实际环境配置,通常设置为核心数的2倍较优

10. metricRegistry
配置该属性,能让连接池将度量信息收集起来供分析。配置的属性是Codahale/Dropwizard的实例,具体可参考wiki页面:https://github.com/brettwooldridge/HikariCP/wiki/Dropwizard-Metrics

11. healthCheckRegistry
同样是收集信息用,这个属性收集的是连接池的健康状况。配置的属性是Codahale/Dropwizard的实例,具体可参考wiki页面:https://github.com/brettwooldridge/HikariCP/wiki/Dropwizard-HealthChecks

最佳的配置总结如下(配用户名称、密码就不用提了):

HikariCP连接池8小时后只有一个连接或session问题相关推荐

  1. java连接池详解与自定义es连接池

    目录 1 版本选择 2 依赖选择 3 使用commons-pool构造连接池 3.1 pom.xml 3.2 对象池类 GenericObjectPool普通对象池 GenericKeyedObjec ...

  2. mysql连接池源码_WCDB-数据库连接池源码解析

    数据库类的简介 SQLiteOpenHelper: 管理SQLite的帮助类,提供获取SQLiteDatabase实例的方法, 它会在第一次使用数据库时调用获取实例方法时创建SQLiteDatabas ...

  3. druid连接池mysql5.7_Spring Boot 使用Druid连接池整合Mybatis-Plus连接Mysql数据库

    一.连接池 在普通的数据库访问程序中,客户程序得到的连接对象是物理连接,调用连接对象的close()方法将关闭连接,而采用连接池技术,客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的 ...

  4. mysql连接池耗尽_定时任务和jdbc连接池的耗尽问题

    最近在一个项目中使用spring的scheduling执行定时任务.简化一下需求,定时进行http请求,把请求的结果放入数据库,这里数据库连接使用c3p0连接池. 问题的描述: 执行了一段时间后,定时 ...

  5. mysql装完后navicat无法连接_重装mysql后导致Navicat连接失败

    今天重装了mysql数据库,然后再使用navicat去连接数据库的时候,一直报错 1251 Client does not support authentication protocol reques ...

  6. c3p0连接池使用完毕后连接返还

    c3p0连接池啊就不多说了.有一个问题吧就是连接使用完毕后要怎么放回连接池,供下次继续使用. 答案是: conn.close();// 放回 可以将连接放回.但在实际应用中有时候发现调用这个方法以后连 ...

  7. 记录在IDEA上使用连接池C3P0操作MySQL的一个问题

    文章目录 问题描述 求助 场景还原 完整配置文件内容: 总结: 问题描述 今天在使用C3P0连接数据库执行对表的一些简单操作的时候出现了一个问题:C3P0始终连接不上并且报如下错误: 八月 08, 2 ...

  8. node mysql 连接池 超时,关于NodeJS中mysql连接池卡死问题

    最近在做毕设,遇到一个问题,就是当我多次请求数据库后就断开了数据库的连接.在网上找了很久答案,最后终于解决了.感谢大神,放上链接. 其实就是被连接池中的释放给坑了 代码中不应该用con.realeas ...

  9. mysql连接池_基于Swoole的通用连接池 - 数据库连接池(life)

    open-smf/connection-pool 是一个基于Swoole的通用连接池,常被用作数据库连接池. 依赖 依赖版本PHP>=7.0.0Swoole>=4.2.9Recommend ...

最新文章

  1. 选项选择Windows XP系统安装MySQL5.5.28图解
  2. python对财务人员的帮助-还不熟练VBA的财务人,让Python带你弯道超车!
  3. (3.2)将分词和去停用词后的评论文本基于“环境、卫生、价格、服务”分类...
  4. SPI四种工作模式时序图
  5. php sem acquire,PHP | 关于php中sem_get failed for key no space left on device问题的解决方案...
  6. Linux中.rpm,Linux中rpm的使用
  7. 36 FI配置-财务会计-应收账款和应付账款-为供应商定义备选统驭科目
  8. magento模板中XML与phtml关系
  9. es6 Class 的继承简介
  10. 《RabbitMQ 实战指南》第三章 客户端开发向导
  11. 《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述
  12. Linux之touch命令
  13. 华为荣耀 4x 刷机体验 直奔 Android 6.0
  14. Python实现AI贪吃蛇
  15. 2008 r2彻底删除 server sql_sql2008完全卸载工具 彻底完全卸载SQL server2008
  16. ant design-Table中的分页实现(包括点击跳页,输入跳页,以及指定每页项目数)
  17. 动手学深度学习环境安装
  18. 阿里云Dataworks平台应用
  19. 线性表2 - 数据结构和算法07
  20. CVR预估建模中样本的问题

热门文章

  1. 低代码平台在ERP软件开发中的作用
  2. [计算机视觉实验一]基本的图像操作与处理
  3. 内忧外患中,黄章的梦想机难救魅族一世
  4. 压力传感+数字开关混合传感集成人机交互面板
  5. mysql error 1094,ERROR 1094 (HY000) at line 1: Unknown thread id
  6. SOLID原则的含义和具体使用
  7. 良心推荐:看完这20部BBC神级纪录片,英语水平提升几个Level!
  8. 大道至简(读后感)第二章 是懒人造就了方法
  9. HTML期末作业课程设计期末大作业——电影网页制作
  10. 系统函数(内置函数)