下面是“批量 kill mysql 中运行时间长的sql”的完整攻略:
1. 确认需要 kill 的 SQL 语句
可以通过执行以下命令查看当前 MySQL 实例中运行时间超过5秒的 SQL 语句:
SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE COMMAND != 'Sleep' AND TIME > 5
ORDER BY TIME DESC;
这里需要注意的是,如果查询到的 SQL 语句当前正在执行,那么不建议直接 kill,可以通过优化这些 SQL 语句或者等待执行完成来解决。
2. 批量 kill SQL 语句
在确认需要 kill 的 SQL 语句后,可以通过以下命令来批量 kill:
SELECT CONCAT('KILL ',ID,';') INTO @killquery
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE USER = 'username' AND COMMAND != 'Sleep' AND TIME > 10;
PREPARE stmt FROM @killquery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
其中,username
为需要 kill 的用户名称,TIME
为运行时间超过的时长(单位为秒),这里设定的是10秒。
以上命令会生成一些由 KILL
+进程 ID 组成的 SQL 语句,并将它们拼接成一条语句,然后通过 PREPARE
、EXECUTE
、DEALLOCATE
三个命令执行。执行成功后即可 kill 掉这些长时间运行的 SQL 语句。
以下是两个示例:
- 示例1:kill 用户 “user1” 中运行时间超过 5 秒的 SQL 语句
SELECT CONCAT('KILL ',ID,';') INTO @killquery
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE USER = 'user1' AND COMMAND != 'Sleep' AND TIME > 5;
PREPARE stmt FROM @killquery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
- 示例2:kill 用户 “user2” 中运行时间超过 20 秒的 SQL 语句
SELECT CONCAT('KILL ',ID,';') INTO @killquery
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE USER = 'user2' AND COMMAND != 'Sleep' AND TIME > 20;
PREPARE stmt FROM @killquery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
以上就是“批量 kill mysql 中运行时间长的SQL”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:批量 kill mysql 中运行时间长的sql - Python技术站