如何在不訪問命令列的情況下洗掉 MySQL 中的所有空閑連接?我需要一個臨時解決方案,因為我們的一項服務沒有正確關閉其連接并用空閑連接淹沒資料庫。
uj5u.com熱心網友回復:
您可以使用存盤程序終止多個連接,例如
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;
這將為KILL 4312;匹配WHERE Command = 'Sleep'條件的每一行創建一個字串,參考id. 然后是EXECUTE作為查詢的字串,結束連接。
像這樣使用它
call kill_all_sleep_connections()
您現在應該在資料庫實體上擁有少于 10 個空閑連接。該WHILE設定為< 10為您認為合適的服務可以創建連接非常快,增加/減少。
您可以查看所有連接
SHOW PROCESSLIST;或者SELECT * FROM information_schema.PROCESSLIST;
您可以通過id使用這些結果中的參考來終止單個連接KILL
KILL 4212;
正確的解決方案是在完成對資料庫的查詢后關閉每個服務中的每個連接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/394748.html
