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)
- 连接的唯一标识,可以用于终止特定连接:
KILL 12345;
2️⃣ USER
(连接的 MySQL 用户)
- 连接数据库的用户名。
root
表示管理员用户,其他可能是业务用户。- 可以用来筛选特定用户的连接:
SELECT * FROM information_schema.processlist WHERE USER = 'app_user';
3️⃣ HOST
(客户端主机地址和端口)
- 显示连接 MySQL 服务器的客户端 IP 和端口号,例如:
192.168.1.100:53421
- 可以用来检查哪些 IP 连接较多:
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 后台线程 找出所有空闲连接(可以适当关闭):
SELECT * FROM information_schema.processlist WHERE COMMAND = 'Sleep';
6️⃣ TIME
(状态持续时间)
- 该状态已持续的时间(秒)。
- 如果
COMMAND='Sleep'
且TIME
很长,可能说明有长时间空闲的连接未释放。 - 找出空闲时间超过 1 小时的连接:
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
等待表锁(可能导致阻塞) 找出所有正在等待锁的查询:
SELECT * FROM information_schema.processlist WHERE STATE LIKE '%lock%';
8️⃣ INFO
(正在执行的 SQL 语句)
- 显示当前连接正在执行的 SQL 语句(可能为空)。
- 如果
SHOW PROCESSLIST;
只显示部分 SQL,可以用SHOW FULL PROCESSLIST;
查看完整 SQL。
🔹 实用 SQL 监控示例
✅ 查询当前连接数
SELECT COUNT(*) FROM information_schema.processlist;
✅ 查询每个用户的连接数
SELECT USER, COUNT(*) AS conn_count
FROM information_schema.processlist
GROUP BY USER
ORDER BY conn_count DESC;
✅ 查询当前执行 SQL 语句最多的 IP
SELECT HOST, COUNT(*) AS conn_count
FROM information_schema.processlist
WHERE COMMAND != 'Sleep'
GROUP BY HOST
ORDER BY conn_count DESC;
✅ 查询执行时间超过 10 秒的 SQL
SELECT * FROM information_schema.processlist WHERE COMMAND='Query' AND TIME > 10;
✅ 查询所有正在执行的 SQL
SELECT ID, USER, HOST, DB, TIME, STATE, INFO
FROM information_schema.processlist
WHERE COMMAND='Query';
✅ 终止某个慢查询
KILL 12345;
🔹 结论
information_schema.processlist
提供所有连接的详细信息,是 MySQL 监控的重要工具。- 结合
COMMAND
、STATE
、TIME
、INFO
字段,可以分析慢查询、找出死锁、清理空闲连接,优化数据库性能。
🚀 建议:
- 结合
SHOW FULL PROCESSLIST;
获取完整 SQL 语句。 - 监控
Sleep
连接数,避免过多空闲连接浪费资源。 - 关注
Locked
、Waiting for table lock
等状态,检查是否有事务阻塞。
这样可以更好地管理 MySQL 连接,提升数据库的稳定性和性能!🎯