博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql经典的8小时问题-wait_timeout
阅读量:5950 次
发布时间:2019-06-19

本文共 1521 字,大约阅读时间需要 5 分钟。

hot3.png

前段时间 现网突然频繁报出 连接不上数据库,偶滴的妖孽,其他地方都是用mysql,也没遇到这个问题呀。

java.io.EOFExceptionat at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2304)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2803)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)

场景出现的理论依据

MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0/dbcp 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向c3p0/dbcp 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。

如果你只是个程序员,你会想着,在去对数据库做操作前,我不是先对数据库连接做个校验或判断什么的,连接是working的,我才干活,那么你得到的解决方案-或许就是这样的

#c3p0配置
60
Test
false
true
60

如果你只是个DBA,你会想着,为什么数据库连接自己断了,是不是哪里有配置,我得去看看,那么你得到的解决方案-可能就是这样的

#my.cnfwait_timeout=31536000  interactive_timeout=31536000

加大wait_timeout的时间。

But 现实环境中需要你考虑的是:

  1. 你设置多久检查一次连接有效的时间 依据是什么?
  2. 默认加大/减小wait_timeout除了解决当前问题,会不会带来其他影响?

个人当前觉得此题 第一需考虑的是:

你业务当前高峰期mysql_connection是多少?保留多久connection在高峰期都不会撑爆你数据库连接池?
如果你知道这个池-那么是改mysql ?还是改c3p0?还是双管齐下都是有据可循且不会带来后遗症的-最佳解决方案

如我当前有环境,一个现网的后台管理系统,使用人数在50以内,那么我wait_timeout 就是默认8小时,c3p0不用做连接有效性检查等,都是万事ok的。

而我还有一个EPG前台管理系统,用户量在300万以内,如果我wait_timeout为8小时,那我一到高峰期肯定就是死翘翘的,会有太多的TCP连接没关闭,

数据库连接数肯定是不够的。
因EPG的一个访问-一次对数据库操作量不大,查询完数据就完成ok啦,wait_timeout 设置在120s内应该是够用啦,那么相对应的c3p0中 设置小于wait_timeout 的时间有效性检查 -就能确保获取到连接是有效的。

请根据业务场景,来配置参数,不要解决了A问题,带来了B问题。

作者:灼灼2015
链接:https://www.jianshu.com/p/69dcae4454b3
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://my.oschina.net/u/2820842/blog/1842669

你可能感兴趣的文章
java操作mongodb(连接池)(转)
查看>>
Android入门(十一)SQLite CURD
查看>>
一个双线程下同一时候操作指针变量导致野指针出现的问题总结
查看>>
Servlet过滤器和监听器
查看>>
js闭包应用
查看>>
AndroidStudio
查看>>
10-10-归并排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
查看>>
JAVA的节点流和处理流
查看>>
jQuery如何退出each循环的?
查看>>
细说JavaScript对象(2):原型对象
查看>>
Sql server在另一台服务器,在Visual Studio 中没问题,IIS中 提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。。。。”...
查看>>
Wordpress 所有hoor列表
查看>>
搭建windows的solr6服务器
查看>>
Linux命令(20)linux服务器之间复制文件和目录
查看>>
你知道C#中的Lambda表达式的演化过程吗?
查看>>
聊一聊PV和并发
查看>>
ASCII码表
查看>>
Maven的作用总结
查看>>
設置Linux保留物理內存並使用 (1)
查看>>
Android画一条横线
查看>>