问题描述
Mysql的某个数据库连接变得很慢。
原因分析:
经过检查,发现是Mysql的Sleep连接数过多,导致资源争抢,所以查询连接变得很慢。
在命令行执行以下查询语句,检查数据库无效连接。
SELECT
*
FROM
information_schema.processlist WHERE USER='root'
AND command='Sleep'
and db = 'yhwz'
order by time desc;
发现了100多个无效连接,经过测试是该原因导致的连接变慢。
解决方案:
查看sleep默认的超时时间
SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
SHOW GLOBAL VARIABLES LIKE 'interactive_timeout';
设置超时时间编程30秒,注意:必须两个参数同时设置才会生效。
set global wait_timeout=30;
set global interactive_timeout=30;
这种修改方式在重启mysql服务后,会失效,所以最好还是把这两个属性配置到mysql配置文件中。
然后手动把sleep的进程给清楚掉,先执行下以下语句,会出现一个cmd单位
SELECT
GROUP_CONCAT(CONCAT('kill ',Id) SEPARATOR';') AS cmd
FROM
information_schema.processlist WHERE USER='root'
AND command='Sleep'
and db = 'yhwz';
把查出来的结果粘贴出来,全部执行一下:
再检查一下连接数,发现无了。
SELECT
*
FROM
information_schema.processlist WHERE USER='root'
AND command='Sleep'
and db = 'yhwz'
order by time desc;