Для получения полного доступа
зарегистрируйтесь.
Сниппет,  SQL

Массовый KILL mysql запросов


Необходимо указать критерии для поиска проблемных запросов:

SET @runTime = 2;
SET @selectPattern = "%";
SET @cUser = "user";
SET @cState = "Sleep";

-- Процедура для создания и выполнения kill-запросов
DELIMITER $$
DROP PROCEDURE IF EXISTS totalKILL $$
CREATE PROCEDURE totalKILL(runTime INT, selectPattern VARCHAR(255), cUser VARCHAR(255), cState VARCHAR(255))
  BEGIN
    
    -- Стартовые директивы
    DECLARE finished INTEGER DEFAULT 0;
    DECLARE oneKillQuery VARCHAR(255) DEFAULT '';
    DECLARE curs CURSOR FOR SELECT kill_query FROM mysql_kill_list;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
    
    -- Ищем необходимые PID's, формируем KILL-запросы
    DROP TABLE IF EXISTS mysql_kill_list;
    SET @stmt = CONCAT("CREATE TEMPORARY TABLE mysql_kill_list AS
                        SELECT CONCAT('KILL ', id, ';') 'kill_query'
                        FROM information_schema.processlist 
                        WHERE `info` LIKE ('", selectPattern, "') 
                        AND `time` >= ", runTime, "
						AND user LIKE ('", cUser, "')
						AND state LIKE ('", cState, "')");
    PREPARE Q FROM @stmt;
    EXECUTE Q;
    DEALLOCATE PREPARE Q;
    
    -- Выполняем каждый kill-запрос по отдельности
    OPEN curs;
    killQueries: LOOP
      FETCH curs
      INTO oneKillQuery;
      IF finished = 1
      THEN
        LEAVE killQueries;
      END IF;
      SET @killQuery = oneKillQuery;
      PREPARE Q FROM @killQuery;
      EXECUTE Q;
      DEALLOCATE PREPARE Q;
    END LOOP killQueries;
    CLOSE curs;

    -- удаляем временную таблицу
    DROP TABLE mysql_kill_list;

  END $$
DELIMITER ;

-- запускаем процедуру с необходимыми параметрами
CALL totalKILL(@runTime, @selectPattern, @cUser, @cState);

-- удаляем процедуру
DROP PROCEDURE totalKILL;
  mysql sql

Автор


Just a cat
  • Репутация: 62
  • Сниппеты : 15
  • Ревизии : 0
Подписаться

Чтобы увидеть комментарии, нужно быть участником сообщества

Регистрация