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 表(需开启相关性能监控)。
相关推荐
x***r1512 小时前
MySQL 8.0安装教程 Windows版:解压+自定义组件+传统认证+密码设置+命令行快捷方式创建指南
数据库·windows·mysql
czlczl200209253 小时前
Redis数据编码
数据库·redis·缓存
Wpa.wk3 小时前
pb协议接口测试
数据库·redis·缓存
IpdataCloud3 小时前
资源受限设备上轻量级IP查询模块的部署方法
网络·数据库·网络协议·tcp/ip
青槿吖3 小时前
SpringMVC通关秘籍(下):日期转换器、拦截器与文件上传的奇幻冒险
java·开发语言·数据库·sql·mybatis·状态模式
楼田莉子3 小时前
MySQL数据库:表及其表相关的操作
数据库·学习·mysql
ZTLJQ3 小时前
驾驭高并发:Python协程与 async/await 完全解析
服务器·数据库·python
百年੭ ᐕ)੭*⁾⁾3 小时前
DataFrame存入mysql以及读取操作
数据库·mysql·numpy·pandas·ipython
²º²²এ松3 小时前
vs code连接ubuntu esp项目
linux·数据库·ubuntu