MySQL如何释放sql

在 MySQL 中,如果 SQL 太多且运行时间长,你可以通过查询 information_schema.PROCESSLIST 表来查看正在运行的 SQL,并按执行时间(TIME 字段)进行排序。

1. 查看正在运行的 SQL 并按执行时间降序排序

执行以下 SQL 语句:

复制代码
SELECT 
    ID, 
    USER, 
    HOST, 
    DB, 
    COMMAND, 
    TIME, 
    STATE, 
    INFO 
FROM 
    information_schema.PROCESSLIST 
WHERE 
    COMMAND != 'Sleep'  -- 排除空闲连接
ORDER BY 
    TIME DESC;          -- 按执行时间从长到短排序

字段说明:

  • ID: 进程 ID,用于杀死会话。
  • USER: 执行该 SQL 的用户。
  • HOST: 客户端主机。
  • DB: 当前连接的数据库。
  • COMMAND: 当前命令类型(如 Query, Sleep, Connect 等)。
  • TIME: 执行时间(秒),这是排序的关键字段。
  • STATE: 当前状态(如 sending data, sorting result 等)。
  • INFO: 正在执行的 SQL 语句内容(如果语句太长可能会被截断)。

2. 只查看执行时间超过特定阈值的 SQL

如果你想找出执行时间超过例如 10 秒 的慢 SQL:

复制代码
SELECT 
    ID, 
    USER, 
    TIME, 
    INFO 
FROM 
    information_schema.PROCESSLIST 
WHERE 
    COMMAND != 'Sleep' 
    AND TIME > 10 
ORDER BY 
    TIME DESC;

3. 生成批量杀死慢查询的语句

如果发现某些 SQL 卡死或运行太久,可以生成 KILL 语句来终止它们:

复制代码
-- 生成杀死执行时间超过 60 秒的会话的 SQL 语句
SELECT 
    CONCAT('KILL ', ID, ';') AS kill_command
FROM 
    information_schema.PROCESSLIST 
WHERE 
    COMMAND != 'Sleep' 
    AND TIME > 60 
ORDER BY 
    TIME DESC;

复制查询结果中的 kill_command 执行即可。


4. 进阶:使用 sys 库查看更详细的统计信息(MySQL 5.7+)

如果你的 MySQL 版本是 5.7 或更高,推荐使用 sys schema,它提供了更易读的视图:

复制代码
-- 查看当前正在执行的语句及其耗时详情
SELECT 
    thd_id, 
    conn_id, 
    user, 
    db, 
    command, 
    state, 
    time, 
    current_statement, 
    lock_latency 
FROM 
    sys.processlist 
WHERE 
    command != 'Sleep' 
ORDER BY 
    time DESC;

或者查看历史平均执行时间最长的 SQL(不仅仅是当前运行的):

复制代码
SELECT 
    query, 
    exec_count, 
    total_latency, 
    avg_latency, 
    max_latency 
FROM 
    sys.statement_analysis 
ORDER BY 
    avg_latency DESC 
LIMIT 10;

注意事项

  • 权限要求 :普通用户只能看到自己的进程,需要 PROCESS 权限(通常 DBA 拥有)才能看到所有用户的正在运行的 SQL。
  • INFO 字段截断information_schema.PROCESSLIST 中的 INFO 字段默认只显示前 1024 个字符。如果需要查看完整 SQL,需查询 performance_schema.events_statements_current 表(需开启相关性能监控)。
相关推荐
一个天蝎座 白勺 程序猿7 分钟前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴12 分钟前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU12 分钟前
三大范式和E-R图
数据库
MaCa .BaKa14 分钟前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发
一江寒逸23 分钟前
零基础从入门到精通MySQL(上篇):筑基篇——吃透核心概念与基础操作,打通SQL入门第一关
数据库·sql·mysql
@土豆25 分钟前
Ubuntu 22.04 运行 Filebeat 7.11.2 崩溃问题分析及解决文档
linux·数据库·ubuntu
专注API从业者37 分钟前
淘宝商品详情 API 与爬虫技术的边界:合法接入与反爬策略的技术博弈
大数据·数据结构·数据库·爬虫
爱码小白1 小时前
MySQL 单表查询练习题汇总
数据库·python·算法
WangJunXiang61 小时前
第09章:PostgreSQL日常维护
数据库·postgresql
三道渊1 小时前
进程通信与网络协议
开发语言·数据库·php