How do I kill all the processes in Mysql “show processlist”?

后端 未结 23 1944
温柔的废话
温柔的废话 2020-12-04 04:49

Because I see a lot of processes there, and the \"time\" column shows big values for all of them.

23条回答
  •  心在旅途
    2020-12-04 05:14

    The following will create a simple stored procedure that uses a cursor to kill all processes one by one except for the process currently being used:

    DROP PROCEDURE IF EXISTS kill_other_processes;
    
    DELIMITER $$
    
    CREATE PROCEDURE kill_other_processes()
    BEGIN
      DECLARE finished INT DEFAULT 0;
      DECLARE proc_id INT;
      DECLARE proc_id_cursor CURSOR FOR SELECT id FROM information_schema.processlist;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
    
      OPEN proc_id_cursor;
      proc_id_cursor_loop: LOOP
        FETCH proc_id_cursor INTO proc_id;
    
        IF finished = 1 THEN 
          LEAVE proc_id_cursor_loop;
        END IF;
    
        IF proc_id <> CONNECTION_ID() THEN
          KILL proc_id;
        END IF;
    
      END LOOP proc_id_cursor_loop;
      CLOSE proc_id_cursor;
    END$$
    
    DELIMITER ;
    

    It can be run with SELECTs to show the processes before and after as follows:

    SELECT * FROM information_schema.processlist;
    CALL kill_other_processes();
    SELECT * FROM information_schema.processlist;
    

提交回复
热议问题