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 表(需开启相关性能监控)。
相关推荐
ClouGence8 小时前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将10 小时前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils1 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波1 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
Jim6002 天前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL2 天前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql
倔强的石头_2 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
zzzzzz3103 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
倔强的石头_5 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库