Mysql--基础知识点--91.2--processlist
在 MySQL 中,SHOW PROCESSLIST
是一个常用命令,用于查看当前数据库服务器上所有正在运行的线程(进程)信息。以下是关键点说明:
1. 命令用法
SHOW FULL PROCESSLIST;
- 输出字段:
列名 含义 Id
线程唯一标识符(可用于 KILL
命令终止进程)User
执行查询的数据库用户 Host
客户端主机名和端口 db
当前使用的数据库 Command
线程正在执行的命令类型(如 Query
,Sleep
,Connect
等)Time
命令已执行的秒数 State
线程的当前状态(如 Sending data
,Sorting result
,Locked
等)Info
线程正在执行的具体 SQL 语句( FULL
关键字会显示完整语句)
2. 权限要求
- 普通用户:默认只能看到自己的线程。
- 管理员权限:需
PROCESS
权限(或SUPER
权限)才能查看所有用户的线程。
3. 常见用例
查看所有活动线程
SHOW FULL PROCESSLIST;
输出示例:
+----+------+-----------------+------+---------+------+---------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+---------------------------------+------------------+
| 5 | root | localhost:12345 | test | Query | 0 | starting | SHOW PROCESSLIST |
| 6 | user | 192.168.1.10:5678| test | Sleep | 120 | | NULL |
+----+------+-----------------+------+---------+------+---------------------------------+------------------+
终止指定线程
KILL 5; -- 终止 Id=5 的线程
过滤长时间运行的查询
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE Command = 'Query' AND Time > 60;
4. 替代方案:INFORMATION_SCHEMA.PROCESSLIST
- 优势:可通过 SQL 查询过滤、排序或聚合数据。
- 示例:
-- 查找执行时间超过 10 秒的查询 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE TIME > 10 AND COMMAND = 'Query';
5. 典型状态解释
Sleep
:线程处于空闲状态(等待新命令)。Query
:正在执行查询。Locked
:查询被锁阻塞(如等待行锁或表锁)。Sending data
:向客户端返回数据。Sorting result
:对结果集进行排序。
6. 结合性能分析
- 若发现长时间运行的查询,可结合
EXPLAIN
分析执行计划,或通过SHOW PROFILES
(需提前启用profiling
)进一步诊断性能瓶颈。
通过 SHOW PROCESSLIST
,您可以实时监控数据库负载、识别阻塞查询,并优化资源使用。