mysql 5.7 查询运行时间较长的sql
开发过程遇到sql 执行时间长,又取消不了的情况 可使用 kill query ID 杀死进程
获取正在运行的sql
SELECT ID, -- 进程ID:MySQL服务器分配给每个连接的唯一标识符,用于区分不同的客户端连接USER, -- 用户账号:建立当前数据库连接的用户名称TIME, -- 执行时间(秒):该查询已经执行的持续时间,单位是秒LEFT(INFO, 100) AS sql_preview, -- SQL预览:当前正在执行的SQL语句的前100个字符,用于快速了解查询内容CASE WHEN TIME > 300 THEN 'CRITICAL - 立即处理' -- 执行超过5分钟:严重级别,需要立即干预WHEN TIME > 60 THEN 'WARNING - 需要关注' -- 执行1-5分钟:警告级别,需要关注ELSE '正常' -- 执行时间正常:无需特别处理END AS severity -- 严重程度:根据执行时间自动分类的严重级别
FROM INFORMATION_SCHEMA.PROCESSLIST -- 系统视图:包含MySQL服务器中所有活跃连接的信息
WHERE TIME > 30 -- 过滤条件:只显示执行时间超过30秒的查询
AND COMMAND != 'Sleep' -- 排除条件:过滤掉空闲的睡眠连接(没有活跃查询的连接)
AND INFO IS NOT NULL -- 排除条件:确保只显示有实际SQL语句的查询
ORDER BY TIME DESC; -- 排序方式:按执行时间降序排列,最耗时的查询排在最前面
杀死进程
kill query 12098013
各字段详细解释:
1. ID (进程ID)
作用:MySQL服务器为每个客户端连接分配的唯一数字标识
重要性:用于识别特定连接,可以通过
KILL ID
命令终止问题查询示例值:12345
2. USER (用户账号)
作用:显示建立数据库连接的用户名称
重要性:帮助识别是哪个用户或应用程序执行的慢查询
示例值:
app_user@192.168.1.100
3. TIME (执行时间)
作用:查询已经运行的秒数
重要性:是判断查询性能的关键指标,时间越长说明问题越严重
单位:秒
监控阈值:
30秒:需要关注
60秒:警告级别
300秒:严重级别
4. sql_preview (SQL预览)
作用:显示正在执行的SQL语句的前100个字符
重要性:快速了解查询内容,帮助诊断问题
限制:只显示前100字符,完整SQL可能需要进一步查询
5. severity (严重程度)
作用:根据执行时间自动分类的严重级别
分级标准:
正常:30-60秒,需要监控
警告:1-5分钟,需要关注和优化
严重:超过5分钟,立即处理
过滤条件解释:
1. WHERE TIME > 30
只关注执行时间超过30秒的查询,避免显示大量正常查询
2. AND COMMAND != 'Sleep'
排除空闲连接(
Sleep
状态),只显示活跃查询
3. AND INFO IS NOT NULL
确保只显示有实际SQL语句的查询,排除系统进程