【腾讯云】618云聚惠,百款云产品限量抢购,1核2G云服务器首年95元 https://cloud.tencent.com/act/cps/redirect?redirect=1059&cps_key=9f7b3aa0b9ee11c8648ef8bf9d4f15a9&from=console

搜搜吧

查看: 91|回复: 1

[资讯] 微服务架构下,MySQL读写分离后,Druid连接池参数优化实战

[复制链接]
  • TA的每日心情
    擦汗
    6 天前
  • 签到天数: 635 天

    [LV.9]以坛为家II

    硕士生

    1万

    主题

    1万

    帖子

    3万

    积分

    Rank: 8Rank: 8

    UID
    15343
    威望
    -561
    贡献
    8107
    在线时间
    321 小时
    注册时间
    2015-10-12
    发表于 2019-9-25 16:04:42 | 显示全部楼层 |阅读模式
    前言

    最近利用MHA做好Mysql读写分离后,时不时有用户反馈后台发布文章时,报程序“通用异常",经问题排查,里面涉及应用JDBC连接池参数及Mysql参数调整问题。

    问题回顾异常日志描述:

    从异常信息反映来看,问题关键有两点

    • 数据库连接池超时设置大于wait_timeout
    • 日志提示,可以通过验证数据库连接或者设置:autoReconnect=true 来避免此异常

    从以上两点可以推测

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

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

    问题定位

    wait_timeout参数具体用途

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

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

    应用端Druid数据库连接池参数排查

    发现连接池有个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天。 此配置会拖累数据库性能,随弃用该方案。

    思路三:配置druid链接池,使用 validation-query test-on-borrow: true test-while-idle: true 三种属性,每次获取数据库连接时判断该连接是否可用。同时设置druidDataSource.setPhyTimeoutMillis参数

    连接最大存活时间,默认是-1(不限制物理连接时间),从创建连接开始计算,如果超过该时间,则会被清理druidDataSource.setPhyTimeoutMillis(15000);

    参考例子

    目前项目中趋于稳定的连接池参数优化实战,参考如下:

    Druid连接池参数官方说明:


    搜搜吧社区温馨提示:
    搜搜吧(www.sosoba.org)十分重视网络版权及其他知识产权的保护,针对网络侵权采取如下版权政策:
    1、本站有理由相信网友侵犯任何人的版权或作品,(图文,文字,下载,视频,非法传播),本站有权不事先通知即删除涉嫌侵权的作品和内容
    2、本站将采取必要的网络技术手段,确认为侵权作品或内容的用户有权进行警告、屏蔽、删除的行为,尽可能的防止侵权行为的发生
    3、搜搜吧影视资源均收集自互联网,没有提供影片资源存储,也未参与录制上传,若本站收录的资源涉及您的版权或知识产权或其他利益,我们会立即删除
    4、搜搜吧,删帖,投诉,举报,侵权,若本站侵犯您的权益,附上身份及权利证明,请直接发送邮件到 kefu-sosoba@qq.com 我们将在一个工作日内删除
    soso搜搜吧社区是聚合百度搜索,搜狗搜索,360搜索,新闻,教育,站长,广告,娱乐,影视,微信,网盘,营销,手机,汽车,游戏,论坛综合为一体的大型门户社区www.sosoba.org
    【腾讯云】腾讯云服务器安全可靠高性能,多种配置供您选择
  • TA的每日心情
    擦汗
    2020-3-25 09:31
  • 签到天数: 95 天

    [LV.6]常住居民II

    硕士生

    1824

    主题

    1万

    帖子

    3万

    积分

    Rank: 8Rank: 8

    UID
    20347
    威望
    -63
    贡献
    874
    在线时间
    45 小时
    注册时间
    2017-3-1
    发表于 2020-3-25 12:18:41 | 显示全部楼层
    眼睛的鲜活便滋润了奋斗的鲜活,拼搏的鲜活,智慧的鲜活,成功的鲜活。
    soso搜搜吧社区是聚合百度搜索,搜狗搜索,360搜索,新闻,教育,站长,广告,娱乐,影视,微信,网盘,营销,手机,汽车,游戏,论坛综合为一体的大型门户社区www.sosoba.org
    回复 支持 反对

    使用道具 举报

    Powered by www.sosoba.org Copyright © 2013-2020 搜搜吧社区 手机版|小黑屋|地图|关于我们|腾讯云代金券|帮助中心|公共DNS|搜搜吧
    广告服务/项目合作: kefu-sosoba@qq.com  侵权举报邮箱: kefu-sosoba@qq.com  搜搜吧建站时间:创建于2013年07月23日
    免责声明:本站所有的内容均来自互联网以及第三方作者自由发布,版权归原作者版权所有,搜搜吧不承担任何的法律责任,若有侵权请来信告知,我们立即删除!

    GMT+8, 2020-5-31 12:47 , Processed in 0.046616 second(s), 9 queries , MemCache On.

    快速回复 返回顶部 返回列表