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 表(需开启相关性能监控)。
相关推荐
hasty1 小时前
policy.xml 在,不代表策略生效:ImageMagick 补丁给安全配置验收的提醒
xml·mysql·安全
Seraphina361 小时前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql
盟接之桥2 小时前
AI助手:你的7×24小时智能管家——让异常预警无处不在
大数据·网络·数据库·人工智能·制造·ai编程
waoooqwe2 小时前
问卷样本真实吗
大数据·数据库·算法·数据分析
可乐ea3 小时前
Agent 评测换判据:用终态数据库状态判定任务是否完成
数据库·ui·oracle·mcp工具·agent评测·终态断言·智能体可靠性
l1t3 小时前
DeepSeek总结的一个不含数据的 DuckDB 数据库
服务器·数据库·duckdb
PaperData4 小时前
2007-2020年税收调查面板数据
数据库
程序员清风4 小时前
CSV、Excel 与数据库数据读取实践
数据库·oracle·excel
GEO实战经验分享5 小时前
GEO技术与工具全景:从监测仪表盘到Schema的实战指南
数据库
一个天蝎座的程序猿5 小时前
IoTDB集群扩容:从慌乱到从容的经验分享
数据库