防⽌连接Mysql超时,JDBC探活配置
我们知道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调⼤数据库超时参数:如果太⼤,可能导致连接数较多,引起性能下降
mysql下载后为啥localhost打不开set global wait_timeout = 2073600;
set global interactive_timeout = 2073600;
2、JDBC配置Mysql连接URL重连机制
jdbc:mysql://localhost:3306/test?user=root&password=&autoReconnect=true
3、JDBC减少连接池内连接⽣存周期:使之⼩于所设置的wait_timeout 的值
<property name="maxIdleTime" value="1800" />
4、JDBC探活:每隔⼀段时间唤醒连接
<property name="preferredTestQuery" value="SELECT 1"/>
<property name="idleConnectionTestPeriod" value="300"/>
5、JDBC升级驱动版本
由于⽼版本有些功能不兼容,导致连接报错,可以升级到最新版本后再观察
JDBC主要参数说明:
<!--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等⽅法来提升连接测试的性能 -->
其他参数:
参数名称参数说明缺省值最低版本要求
user数据库⽤户名(⽤于连接数据库)所有版本password⽤户密码(⽤于连接数据库)所有版本useUnicode是否使⽤Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必
须设置为true false 1.1g characterEncoding当useUnicode设置为true时,指定字符编码。⽐如可设置为gb2312或gbk false 1.1g autoReconnect当数据库连接异常中断时,是否⾃动重新连接?false 1.1
autoReconnectForPools是否使⽤针对数据库连接池的重连策略false 3.1.3 failOverReadOnly⾃动重连成功后,连接是否设置为只读?true 3.0.12 maxReconnects autoReconnect设置为true时,重试连接的次数3 1.1 initialTimeout autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒2 1.1 connectTimeout和数据库服务器建⽴socket连接时的超时,单位:毫秒。 0表⽰永不超时,适⽤于JDK 1.4及更⾼版本0 3.0.1 socketTimeout socket操作(读写)超时,单位:毫秒。 0表⽰永不超时0 3.0.1
更多参数解读:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论