Kev*_*ter 3 mysql database stored-procedures
如何在不访问命令行的情况下删除 MySQL 中的所有空闲连接?我需要一个临时解决方案,因为我们的一项服务没有正确关闭其连接,并且数据库中充满了空闲连接。
您可以使用存储过程来终止多个连接,例如
CREATE PROCEDURE kill_all_sleep_connections()
BEGIN
WHILE (SELECT count(*) as _count from information_schema.processlist where Command = 'Sleep') > 10 DO
set @c := (SELECT concat('KILL ', id, ';') as c from information_schema.processlist where Command = 'Sleep' limit 1);
prepare stmt from @c;
execute stmt;
END WHILE;
END;
Run Code Online (Sandbox Code Playgroud)
KILL 4312;这将为匹配条件的每一行创建一个字符串WHERE Command = 'Sleep',引用id. 然后就是EXECUTE将字符串作为查询,结束连接。
像这样使用它
call kill_all_sleep_connections()
Run Code Online (Sandbox Code Playgroud)
现在,数据库实例上的空闲连接数应该少于 10 个。设置WHILE为< 10服务可能会非常快地创建连接,因此请根据需要增加/减少。
您可以查看所有连接
SHOW PROCESSLIST;或者SELECT * FROM information_schema.PROCESSLIST;id您可以通过引用这些结果中的来终止单个连接KILL
KILL 4212;正确的解决方案是在完成数据库查询后关闭每个服务中的每个连接。