在 MySQL 中使用 SHOW PROCESSLIST 语句显示连接列表
本文介绍了在 MySQL 中如何使用 SHOW PROCESSLIST
语句显示当前数据库服务器中所有的连接。
作为一个数据库管理员或者维护人员,您可能想了解当前数据库服务器的连接情况。因为连接过多可能会导致数据库服务器的宕机。
MySQL 提供了 SHOW PROCESSLIST
命令用来返回当前数据库服务器的所有的连接的信息,包括连接的 ID,用户,主机,数据库,时间和状态等。
MySQL 将当前服务器的所有的连接信息保存在 information_schema.processlist
表中,您还可以从此表查询所有的连接的信息。
实际上, SHOW PROCESSLIST
命令只是查询 information_schema.processlist
表的简写形式。
有时,您可能会收到 MySQL 服务器返回的“连接过多”错误。要找出原因,您可以使用 SHOW PROCESSLIST
命令获取当前所有的连接,并使用 KILL
语句终止空闲线程。
SHOW PROCESSLIST 语法
下面是 MySQL SHOW PROCESSLIST
命令的语法:
SHOW [FULL] PROCESSLIST;
FULL
是可选的,如果指定了 FULL
,则返回的 Info
列中显示完整的语句,否则,只返回语句的前 100 个字符。
拥有 PROCESS
权限的账户可以查看当前的所有连接。否则,他们只能查看与其帐户关联的连接。
输出
SHOW PROCESSLIST
命令的输出由以下列组成:
ID
- 客户端进程的 ID
User
- 与线程关联的用户名。
Host
- 客户端连接的主机
db
- 如果选择了其他数据库,则为默认数据库,否则为
NULL
。 Command
- 命令类型
Time
- 当前线程处于当前状态的秒数。
State
- 线程状态,表示指示正在执行的线程的操作、事件或状态。
Info
- 正在执行的语句,或者
NULL
它没有执行任何语句。如果不在SHOW PROCESSLIST
命令中使用FULL
关键字,则在此列中仅返回每个语句的前 100 个字符。
SHOW PROCESSLIST 实例
让我们使用 root
用户运行以下 SHOW PROCESSLIST
语句:
SHOW PROCESSLIST;
+----+-----------------+---------------------+---------+---------+---------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+---------------------+---------+---------+---------+------------------------+------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 4141488 | Waiting on empty queue | NULL |
| 27 | root | 192.168.0.204:54690 | NULL | Query | 0 | starting | SHOW PROCESSLIST |
| 28 | sqliz | 192.168.0.204:54692 | sqlizdb | Sleep | 247 | | NULL |
+----+-----------------+---------------------+---------+---------+---------+------------------------+------------------+
这里, root
用户为超级用户并且拥有 PROCESS
权限,因此他能查看所有的连接。
让我们使用 sqliz
用户运行以下 SHOW PROCESSLIST
语句:
SHOW PROCESSLIST;
+----+-------+---------------------+---------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------+---------------------+---------+---------+------+----------+------------------+
| 28 | sqliz | 192.168.0.204:54692 | sqlizdb | Query | 0 | starting | SHOW PROCESSLIST |
+----+-------+---------------------+---------+---------+------+----------+------------------+
这里, sqliz
用户为欧通用户并且不具有 PROCESS
权限,因此他只能查看与他关联的连接。
从表中查询
MySQL 将当前服务器的所有的连接信息保存在 information_schema.processlist
表中。因此,您可以使用下面的语句从此表查询所有的连接的信息。
SELECT * FROM information_schema.processlist;
+----+-----------------+---------------------+---------+---------+---------+------------------------+----------------------------------------------+
| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |
+----+-----------------+---------------------+---------+---------+---------+------------------------+----------------------------------------------+
| 27 | root | 192.168.0.204:54690 | NULL | Query | 0 | executing | SELECT * FROM information_schema.processlist |
| 28 | sqliz | 192.168.0.204:54692 | sqlizdb | Sleep | 18 | | NULL |
| 5 | event_scheduler | localhost | NULL | Daemon | 4142731 | Waiting on empty queue | NULL |
+----+-----------------+---------------------+---------+---------+---------+------------------------+----------------------------------------------+
结论
在本文中,您学习了获取 MySQL 数据库服务器的连接列表的两种方法:
- 使用
SHOW PROCESSLIST
命令 - 从
information_schema.processlist
表中查询。