前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >防止连接Mysql超时,JDBC探活配置

防止连接Mysql超时,JDBC探活配置

作者头像
MySQL轻松学
发布2018-03-09 15:44:06
8.7K0
发布2018-03-09 15:44:06
举报
文章被收录于专栏:MYSQL轻松学

我们知道Mysql有两个关于连接超时的参数,默认为8小时:

MySQL > show global variables like '%timeout%';

wait_timeout = 28800

非交互连接等待时间

interactive_timeout = 28800

交互连接等待时间

MySQL > show processlist;

当connection空闲(Sleep)超过8小时,Mysql将自动断开该connection,而JDBC连接池并不知道该connection已经失效,如果这时有Client请求connection,JDBC将该失效的Connection提供给Client,将会造成异常。

一般会有5种处理方式:

1、MYSQL调大数据库超时参数:如果太大,可能导致连接数较多,引起性能下降

代码语言:javascript
复制
set global wait_timeout = 2073600;
set global interactive_timeout = 2073600;

2、JDBC配置Mysql连接URL重连机制

代码语言:javascript
复制
jdbc:mysql://localhost:3306/test?user=root&password=&autoReconnect=true

3、JDBC减少连接池内连接生存周期:使之小于所设置的wait_timeout 的值

代码语言:javascript
复制
<property name="maxIdleTime" value="1800" />   

4、JDBC探活:每隔一段时间唤醒连接

代码语言:javascript
复制
<property name="preferredTestQuery" value="SELECT 1"/> 
<property name="idleConnectionTestPeriod" value="300"/>

5、JDBC升级驱动版本

由于老版本有些功能不兼容,导致连接报错,可以升级到最新版本后再观察

下载地址:https://dev.mysql.com/downloads/connector/j/

JDBC主要参数说明:

代码语言:javascript
复制
<!--IP端口库用户密码等-->  
<property name="jdbcUrl">
<property name="user">
<property name="password">
<!--连接池中保留的最小连接数。-->   
<property name="minPoolSize" value="5" />   
<!--连接池中保留的最大连接数。Default: 15 -->   
<property name="maxPoolSize" value="20" />   
<!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->   
<property name="maxIdleTime" value="1800" />   
<!--当连接池中的连接耗尽的时候,一次同时获取的连接数。Default: 3 -->   
<property name="acquireIncrement" value="2" />   
<property name="maxStatements" value="1000" />   
<property name="initialPoolSize" value="10" />   
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->   
<property name="acquireRetryAttempts" value="30" />   
<property name="breakAfterAcquireFailure" value="true" />   
<!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下select 1显著提高测试速度,比默认语句SHOW FULL TABLES FROM `dbname` LIKE 'PROBABLYNOT'效率高很多 -->
<property name="preferredTestQuery" value="SELECT 1"/> 
<!--每300秒检查所有连接池中的空闲连接。Default: 0 -->      
<property name="idleConnectionTestPeriod" value="300"/> 
<!--每次把连接checkin到pool时,测试其有效性 --> 
<property name="testConnectionOnCheckin" value="false"/>  
<!--每次把连接从pool内checkout时,测试其有效性 --> 
<property name="testConnectionOnCheckout" value="false"/>
<!--上面两个参数如果为true那么每个connection提交时都会校验其有效性,会造成至少多一倍的数据库调用,性能消耗较大,慎重使用,建议使用 idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的性能 --> 

其他参数:

更多参数解读:

https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MYSQL轻松学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档