美文网首页
Mysql连接池及8h问题

Mysql连接池及8h问题

作者: entro | 来源:发表于2019-06-13 20:40 被阅读0次

mysql连接池

在spring2以后默认连接池由Tomcat换成了HikariCP(Hikari Connection Pool),其他常用的数据库连接池有阿里巴巴的Druid,Apache的DBCP(DataBase Connection Pool)等。
可以通过spring.datasource.type=com.alibaba.druid.pool.DruidDataSource来指定CP并引用相应的包文件来使用该CP。

网上有人做过性能测试,大略的结果是:hikariCP>druid>tomcat-jdbc>dbcp>c3p0 。

HikariCP的高性能得益于最大限度的避免锁竞争.
Druid功能最为全面,提供sql拦截等功能,在数据统计方面做的较为全面,具有良好的扩展性。

要设置连接池默认大小、最大最小连接数等,需要查询使用的响应的CP的配置。

8小时问题

mysql服务端默会在8h无使用的情况下关闭连接,客户端连接池没有检测连接是否有效(主要是性能原因的考虑)而给到用户使用会抛出异常。
解决办法是:

  1. 把超时时间设置得更长(7天或者30天)
    修改mysql的my.cnf配置文件
wait_timeout=x
interactive_timeout=x
  1. 在业务量小的情况下造成8h都不会使用一次连接,那么设置一个定时器在8h内使用一次连接池的这些连接。
Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 1,767 milliseconds ago.  The last packet sent successfully to the server was 1,767 milliseconds ago

springboot项目使用tomcat连接的时候有几个配置项采用的就是这种思路

 #当从连接池借用连接时,是否测试该连接.
  spring.datasource.tomcat.test-on-borrow: false  
  #当连接空闲时,是否执行连接测试
  spring.datasource.tomcat.test-while-idle: true 
  #指定空闲连接检查、废弃连接清理、空闲连接池大小调整之间的操作时间间隔
  spring.datasource.tomcat.time-between-eviction-runs-millis: 18800 
  1. 每次检测连接是否有效 性能差,用于测试环境

springboot + tomcat连接池的另一种配置方式:每次借用连接时检测连接是否有效

 spring.datasource.tomcat.validation-query: SELECT 1
 #当从连接池借用连接时,是否测试该连接.
 spring.datasource.tomcat.test-on-borrow: true  
 #指定空闲连接检查、废弃连接清理、空闲连接池大小调整之间的操作时间间隔
 spring.datasource.tomcat.time-between-eviction-runs-millis: 18800 

连接太多(满了)

使用root身份(root身份会预留一个连接)登录数据库查看连接 SHOW FULL PROCESSLIST,kill 对应的连接id

相关文章

网友评论

      本文标题:Mysql连接池及8h问题

      本文链接:https://www.haomeiwen.com/subject/qwpefctx.html