程序mysql连接处理的不够好,造成了巨多mysql连接,动不动就10000+搞的我们运维很紧张(绝大部分是sleep)。一直催大神们优化mysql的连接问题,同时我们也要有临时解决问题的方法,有mysql大神助攻感觉挺好。
1、查看mysql的总连接数:
1 | select count(*)'连接数' from information_schema.processlist; |
2、再设置下mysql的session超时时间,默认是8小时,后来是1500s,现在sleep的线程太多了,将超时时间设置成合理的值,这里设置成120s。
1 | show global variables like "%timeout%"; |
设置成120s,必须同时设置这两个参数才生效。
1 | set global interactive_timeout=120 |
3、设置超时时间只对新的session生效,之前的不会释放,需要手动kill
查询120s以上session 的id,排除不必要系统session。
1 | select id from information_schema.processlist where time>120 and user<>'system user' and command <>'Binlog Dump' and command ='Sleep'; |
也可以根据用户名等查询
1 | select id from information_schema.processlist where time>120 and user='xxxxxuser' and command='Sleep' |
写成脚本批量kill这些session
1 | #!/bin/bash |
然后整个世界就安静了,记得将更改的参数写到mysql的配置文件里。