科帮网-Java论坛、Java社区、JavaWeb毕业设计

登录/注册
您现在的位置:论坛 资料库 数据库开发 > mysql sleep链接过多的原因及解决办法
总共48086条微博

动态微博

查看: 1415|回复: 0

mysql sleep链接过多的原因及解决办法

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2015-09-16 21:17:42 |只看该作者 |倒序浏览


    show processlist 看了以下


    睡眠连接过多,会对mysql服务器造成什么影响?

    严重消耗mysql服务器资源(主要是cpu, 内存),并可能导致mysql崩溃。

    造成睡眠连接过多的原因?

    1. 使用了太多持久连接(个人觉得,在高并发系统中,不适合使用持久连接)

    2. 程序中,没有及时关闭mysql连接

    3. 数据库查询不够优化,过度耗时。

    那么,如果要从根本上解决sleep连接过多,就得从以上三点反复检查,但是见效并不快。

    网上有人分享,使用shell脚本配合cron,定期杀死睡眠时间太久的连接,但是这种方法非常不可取,典型的以暴制暴,很可能导致数据崩溃,而且,还需要编写相应shell, 设置cron, 实施成本较繁琐,不推荐使用。

    那么更好的办法应该是让mysql自己决定这些睡眠连接的命运,实施会更简单,有效。

    mysql的配置文件中,有一项:

    wait_timeout, 即可设置睡眠连接超时秒数,如果某个连接超时,会被mysql自然终止,多好的办法!

    如设置: 

    wait_timeout=100 #即设置mysql连接睡眠时间为100秒,任何sleep连接睡眠时间若超过100秒,将会被mysql服务自然终止,要比编写shell脚本更简单。

    那么,对于正在运行中的生产服务器,在不能停止服务情况下,修改此项怎么办?很简单,以root用户登录到mysql,执行:

    set global wait_timeout=100

    即可。

    在我的生产环境中,使用这个办法,取得了相当好的效果。

    当然,更根本的方法,还是从以上三点排查之:

    1. 程序中,不使用持久链接,即使用mysql_connect而不是pconnect。

    2.   程序执行完毕,应该显式调用mysql_close

    3. 只能逐步分析系统的SQL查询,找到查询过慢的SQL,优化之





    科帮网-Java论坛、Java社区、JavaWeb毕业设计 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网-Java论坛、Java社区、JavaWeb毕业设计享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网-Java论坛、Java社区、JavaWeb毕业设计的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网-Java论坛、Java社区、JavaWeb毕业设计管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表