information_schema.processlist 表详解

information_schema.processlist 表(或 SHOW PROCESSLIST; 命令)用于查看 MySQL 当前所有的连接进程,帮助管理员监控数据库活动并排查性能问题。以下是该表的字段及其具体含义:


🔹 information_schema.processlist 字段详解

字段名 数据类型 含义 示例
ID BIGINT 连接的唯一 ID(线程 ID) 12345
USER VARCHAR 连接的 MySQL 用户 root
HOST VARCHAR 连接的客户端主机和端口 192.168.1.100:53421
DB VARCHAR 连接使用的数据库(为空表示未选择数据库) test_db
COMMAND VARCHAR 当前连接的执行状态 Query / Sleep / Binlog Dump
TIME INT 该状态已持续的时间(秒) 120
STATE VARCHAR 当前执行 SQL 的具体状态 Sending data
INFO LONGTEXT 连接执行的 SQL 语句(可能为 NULL) SELECT * FROM users;

🔹 关键字段解析

1️⃣ ID(连接 ID)
  • 连接的唯一标识,可以用于终止特定连接:

    sql 复制代码
    KILL 12345;
2️⃣ USER(连接的 MySQL 用户)
  • 连接数据库的用户名。

  • root 表示管理员用户,其他可能是业务用户。

  • 可以用来筛选特定用户的连接 :

    sql 复制代码
    SELECT * FROM information_schema.processlist WHERE USER = 'app_user';
3️⃣ HOST(客户端主机地址和端口)
  • 显示连接 MySQL 服务器的客户端 IP 和端口号,例如:

    复制代码
    192.168.1.100:53421
  • 可以用来检查哪些 IP 连接较多 :

    sql 复制代码
    SELECT HOST, COUNT(*) AS conn_count 
    FROM information_schema.processlist 
    GROUP BY HOST 
    ORDER BY conn_count DESC;
4️⃣ DB(使用的数据库)
  • 连接当前选中的数据库,NULL 表示未选择数据库。
5️⃣ COMMAND(连接执行的操作)
  • 代表当前连接的执行状态,常见取值:

    COMMAND 说明
    Sleep 连接空闲(等待新查询)
    Query 正在执行 SQL 语句
    Connect 正在建立连接
    Binlog Dump 复制(主从同步)
    Daemon MySQL 后台线程
  • 找出所有空闲连接(可以适当关闭):

    sql 复制代码
    SELECT * FROM information_schema.processlist WHERE COMMAND = 'Sleep';
6️⃣ TIME(状态持续时间)
  • 该状态已持续的时间(秒)。

  • 如果 COMMAND='Sleep' 且 TIME 很长,可能说明有长时间空闲的连接未释放。

  • 找出空闲时间超过 1 小时的连接 :

    sql 复制代码
    SELECT * FROM information_schema.processlist WHERE COMMAND = 'Sleep' AND TIME > 3600;
7️⃣ STATE(SQL 具体状态)
  • 代表 SQL 语句的执行状态,便于分析慢查询:

    STATE 说明
    NULL 没有运行中的 SQL
    Checking table 正在检查表
    Sending data 正在返回结果集
    Locked 事务锁等待中
    Copying to tmp table 正在创建临时表(可能影响性能)
    Sorting result 正在执行排序
    Waiting for table lock 等待表锁(可能导致阻塞)
  • 找出所有正在等待锁的查询:

    sql 复制代码
    SELECT * FROM information_schema.processlist WHERE STATE LIKE '%lock%';
8️⃣ INFO(正在执行的 SQL 语句)
  • 显示当前连接正在执行的 SQL 语句(可能为空)。
  • 如果 SHOW PROCESSLIST; 只显示部分 SQL,可以用 SHOW FULL PROCESSLIST; 查看完整 SQL。

🔹 实用 SQL 监控示例

✅ 查询当前连接数
sql 复制代码
SELECT COUNT(*) FROM information_schema.processlist;
✅ 查询每个用户的连接数
sql 复制代码
SELECT USER, COUNT(*) AS conn_count 
FROM information_schema.processlist 
GROUP BY USER 
ORDER BY conn_count DESC;
✅ 查询当前执行 SQL 语句最多的 IP
sql 复制代码
SELECT HOST, COUNT(*) AS conn_count 
FROM information_schema.processlist 
WHERE COMMAND != 'Sleep' 
GROUP BY HOST 
ORDER BY conn_count DESC;
✅ 查询执行时间超过 10 秒的 SQL
sql 复制代码
SELECT * FROM information_schema.processlist WHERE COMMAND='Query' AND TIME > 10;
✅ 查询所有正在执行的 SQL
sql 复制代码
SELECT ID, USER, HOST, DB, TIME, STATE, INFO 
FROM information_schema.processlist 
WHERE COMMAND='Query';
✅ 终止某个慢查询
sql 复制代码
KILL 12345;

🔹 结论

  • information_schema.processlist 提供所有连接的详细信息,是 MySQL 监控的重要工具。
  • 结合 COMMAND、STATE、TIME、INFO 字段,可以分析慢查询、找出死锁、清理空闲连接,优化数据库性能。

🚀 建议:

  • 结合 SHOW FULL PROCESSLIST; 获取完整 SQL 语句。
  • 监控 Sleep 连接数,避免过多空闲连接浪费资源。
  • 关注 Locked、Waiting for table lock 等状态,检查是否有事务阻塞。

这样可以更好地管理 MySQL 连接,提升数据库的稳定性和性能!🎯

相关推荐
for_ever_love__9 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
Sayai13 小时前
DataX 离线数据同步实战:Elasticsearch 数据批量导出 MySQL(作业配置、并发调优与定时同步平台化设计)
大数据·mysql·elasticsearch·datax·数据同步
颜酱13 小时前
一栋商业大厦,讲清 InnoDB 的表空间、段、区和页
后端·mysql
PC2005-cloud15 小时前
Mysql学习笔记:InnoDB Cluster 集群从零搭建实战,基于 Docker 实现高可用读写分离架构
笔记·学习·mysql
这个DBA有点耶16 小时前
分布式事务深度:TCC空回滚、悬挂与Saga补偿风暴的根因与解法
数据库·mysql·代码规范
QEasycloud16 小时前
BOM接口抛转失败钉钉通知策略实战教程:MySQL异常日志到钉钉消息的端到端配置
android·mysql·钉钉
又尔D.16 小时前
MySQL下载安装
数据库·mysql
夜雪一千16 小时前
MySQL 删除 JSON 类型的数据实战
mysql·adb·json
iCxhust18 小时前
51单片机电力载波应用开发(九)51产品化
c语言·数据库·嵌入式硬件·mysql·51单片机·软件工程·c51
tryxr18 小时前
如何分析一个慢sql
数据库·sql·mysql·慢sql