• MySQL sleep过多解决方法


    睡眠连接过多,会对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,优化之

    转自

    MySQL sleep连接过多的完美解决办法_数据库技术_Linux公社-Linux系统门户网站
    http://www.linuxidc.com/Linux/2010-11/29983.htm

    如下图所示: 
    这里写图片描述 
    在Navicat Premium中可以看到很多处于sleep状态的连接,那怎么让MySQL自动关闭这些处理sleep状态的连接呢?

    wait_timeout默认值: 
    这里写图片描述 
    interactive_timeout默认值: 
    这里写图片描述

    sql命令:

    SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
    SHOW GLOBAL VARIABLES LIKE 'interactive_timeout';
    set global wait_timeout=30;
    SET GLOBAL interactive_timeout=30;

    小注:wait_timeout要与interactive_timeout一起修改才能起效。 
    这种修改方式在重启mysql服务后,会失效,所以最好还是把这两个属性配置到mysql配置文件中。

    转自

    MySQL sleep连接过多 解决办法 - 衣舞晨风 - CSDN博客
    http://blog.csdn.net/jiankunking/article/details/53511576

  • 相关阅读:
    ARP攻击原理与解决
    如何查看数据库各种表oracle
    MyEclipse 8.0注册码
    oracle数据库导入导出
    输出设备已满或不可用, 归档程序无法归档重做日志[oracle解决方法]
    句柄以及对象的比较java
    shutdown immediate 后无法启动实例问题解决
    马云经典语录
    海量数据处理分析_BI
    数据库迁移方案
  • 原文地址:https://www.cnblogs.com/paul8339/p/7205256.html
Copyright © 2020-2023  润新知