information_schema.processlist
表(或 SHOW PROCESSLIST;
命令)用于查看 MySQL 当前所有的连接进程,帮助管理员监控数据库活动并排查性能问题。以下是该表的字段及其具体含义:
字段名 | 数据类型 | 含义 | 示例 |
---|---|---|---|
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; |
ID
(连接 ID)KILL 12345;
USER
(连接的 MySQL 用户)root
表示管理员用户,其他可能是业务用户。SELECT * FROM information_schema.processlist WHERE USER = 'app_user';
HOST
(客户端主机地址和端口)192.168.1.100:53421
SELECT HOST, COUNT(*) AS conn_count
FROM information_schema.processlist
GROUP BY HOST
ORDER BY conn_count DESC;
DB
(使用的数据库)NULL
表示未选择数据库。COMMAND
(连接执行的操作)代表当前连接的执行状态,常见取值:
COMMAND | 说明 |
---|---|
Sleep |
连接空闲(等待新查询) |
Query |
正在执行 SQL 语句 |
Connect |
正在建立连接 |
Binlog Dump |
复制(主从同步) |
Daemon |
MySQL 后台线程 |
找出所有空闲连接(可以适当关闭):
SELECT * FROM information_schema.processlist WHERE COMMAND = 'Sleep';
TIME
(状态持续时间)COMMAND='Sleep'
且 TIME
很长,可能说明有长时间空闲的连接未释放。SELECT * FROM information_schema.processlist WHERE COMMAND = 'Sleep' AND TIME > 3600;
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%';
INFO
(正在执行的 SQL 语句)SHOW PROCESSLIST;
只显示部分 SQL,可以用 SHOW FULL PROCESSLIST;
查看完整 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;
SELECT HOST, COUNT(*) AS conn_count
FROM information_schema.processlist
WHERE COMMAND != 'Sleep'
GROUP BY HOST
ORDER BY conn_count DESC;
SELECT * FROM information_schema.processlist WHERE COMMAND='Query' AND TIME > 10;
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 连接,提升数据库的稳定性和性能!