数据库连接数居高不下,导致系统越来越慢

前段时间,公司系统突然异常缓慢,通过阿里云监控看到连接数突然陡增,并且不释放,以下是我们的处理步骤:

1、通过阿里云提供的监控日志查询是CPU过高,还是连接数过高导致的。

2、CPU过高可能与读写操作过高有关,我们是连接数过高导致的。

3、是否有程序发送大量的情况,频繁请求数据库导致连接数过高?不是

4、检查慢SQL是否过多,导致很多链接时间过长,导致链接不释放。这里可以通过show PROCESSLIST;或者阿里云提供的慢SQL工具来查找。

5、在show PROCESSLIST;中意外发现有大量的SLEEP的链接,并且每个达到上万秒,通过手动kill {id}的方式,把这些链接kill掉解决了这个难题(最笨的方法,应以尽快恢复服务为主,下面是正统的解决办法)。



那么造成sleep的原因,有三个,下面是mysql手册给出的解释:

1.客户端程序在退出之前没有调用mysql_close().
2.客户端sleep的时间在wait_timeout或interactive_timeout规定的秒内没有发出任何请求到服务器. 
3.客户端程序在结束之前向服务器发送了请求还没得到返回结果就结束掉了. 
原文请见下面: 
1 The client program did not call mysql_close() before exiting. 
2 The client had been sleeping more than wait_timeout or interactive_timeout seconds without issuing any requests to the server. 
3 The client program ended abruptly in the middle of a data transfer 

其中1和3并不好排查,框架有时候就帮我们优化处理了很多。

关于2建议手动设置一下超时时间,我们公司竟然超时时长为1天,肯定是不行的,通过下面语句可进行调整:

mysql> set global wait_timeout=10;  
mysql> show global variables like '%timeout';  
另,wait_timeout默认情况下wait_timeout的值是8小时的时间,你可以改成1个小时,或半个小时。这样mysql会更快的杀死死连接。防止连接的数量越多,对你服务器的压力越大。实际上那些连接都是冗余的,把它们尽快杀死才是上策。


  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值