加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 系统 > 正文

MySQL读写分离后,Druid连接池参数优化演习

发布时间:2021-06-03 12:11:19 所属栏目:系统 来源:互联网
导读:第一、应用程序数据库连接池超时参数设置有问题 第二、安装Mysql数据库时,对于Mysql的内在参数wait_timeout没有做实际场景的优化处理 问题定位 wait_timeout参数具体用途 wait_timeout具体含义是服务器关闭非交互连接之前等待活动秒数。MySQL缺省配置情况

第一、应用程序数据库连接池超时参数设置有问题

第二、安装Mysql数据库时,对于Mysql的内在参数wait_timeout没有做实际场景的优化处理

问题定位

wait_timeout参数具体用途

wait_timeout具体含义是服务器关闭非交互连接之前等待活动秒数。MySQL缺省配置情况下,wait_timeout的初始值是28800秒,也就是8小时。如果wait_timeout超时时间设置过大,在MySQL管理系统里会产生大量的SLEEP进程无法及时释放,会导致服务器系统性能下降;同时该参数设置过小,会导致Mysql处理某些事务未处理,连接不可用状态。

也就是说如果在wait_timeout设置期间内,数据库连接Connection一直处于空闲等待状态,mysql内部会自动关闭此连接,而应用程序无法感知到,依然认为连接池合法持有该连接。当应用端再次用该连接来进行数据库操作时,就产生上述异常错误。

发现连接池有个MaxWait参数设置过大:60000毫秒

druidDataSource.setMaxWait(60000) 

然后在CSDN上,发现有个同行碰到同样的问题:

发现数据库等待超时时间(wait_timeout)是28800s,也就是8小时,而应用程连接池参数max-wait: 30000,所以导致项目判定该链接可用,而mysql判定该连接不可用导致连接失败。

解决办法

根据上面的分析思路,我们排查了Mysql生产库,发现默认Mysql超时时间(wait_timeout)也是28800s,但是应用层连接池MaxWait参数设置成60000,于是我把MaxWait参数设置成10000,小于Mysql超时时间(wait_timeout):28800 ,在测试环境等待8小时后,报错消失了。

其他扩展思路(来源网络)

思路一:在jdbc-url后添加 &autoReconnect=true,使用后无效,查的该方案只适用于Mysql4之前的版本有效

思路二:将mysql回收空闲连接的时间变长,mysql默认回收时间是8小时,可以在mysql目录下的my.ini中增加下面配置,将时间改为1天。单位是秒,最大好像是24天。 此配置会拖累数据库性能,随弃用该方案。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读