mysql 5.7 查询运行时间较长的sql

开发过程遇到sql 执行时间长,又取消不了的情况 可使用 kill query ID 杀死进程

获取正在运行的sql

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;               -- 排序方式:按执行时间降序排列,最耗时的查询排在最前面

杀死进程

sql 复制代码
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语句的查询,排除系统进程