簡體   English   中英

MySQL - 殺死所有睡眠連接

[英]MySQL - Kill all sleeping connections

如何在不訪問命令行的情況下刪除 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;

這將創建一個類似KILL 4312; 對於匹配WHERE Command = 'Sleep'條件的每一行,引用id 然后它EXECUTE的字符串作為查詢,結束連接。

像這樣使用它

call kill_all_sleep_connections()

您現在應該在數據庫實例上擁有少於 10 個空閑連接。 WHILE設置為< 10 ,因為服務可能會非常快速地創建連接,因此可以根據需要增加/減少。


您可以查看所有連接

  • SHOW PROCESSLIST; SELECT * FROM information_schema.PROCESSLIST;

您可以通過使用KILL引用這些結果中的id來終止單個連接

  • KILL 4212;

一個適當的解決方案是在完成對數據庫的查詢后關閉每個服務中的每個連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM