15.7.7.30 显示进程列表语句
SHOW [FULL] PROCESSLIST
INFORMATION_SCHEMA 实现的SHOW PROCESSLIST
已弃用,可能在未来 MySQL 版本中被删除。建议使用 Performance Schema 实现的SHOW PROCESSLIST
代替。
MySQL 进程列表显示当前正在执行的线程的操作。SHOW PROCESSLIST
语句是进程信息的一种来源。关于该语句与其他来源的比较,请参阅进程信息来源。
基于 Performance Schema 的processlist
表提供了SHOW PROCESSLIST
的备用实现,该实现不同于默认的SHOW PROCESSLIST
实现,不需要锁定和具有更好的性能特性。详细信息请参阅Section 29.12.22.7, “The processlist Table”。
如果您拥有PROCESS
特权,可以查看所有线程,包括其他用户的线程。否则(没有PROCESS
特权),非匿名用户可以访问自己的线程信息,但不能访问其他用户的线程信息,匿名用户无法访问线程信息。
不使用FULL
关键字,SHOW PROCESSLIST
只显示每个语句的前 100 个字符在Info
字段中。
SHOW PROCESSLIST
语句非常有用,如果您收到““太多连接””错误消息,想要了解发生了什么。MySQL 保留一个额外的连接,以便账户拥有CONNECTION_ADMIN
特权(或弃用的SUPER
特权),以确保管理员总是可以连接并检查系统(假设您不将这个特权赋予所有用户)。
线程可以使用KILL
语句杀死。详细信息请参阅Section 15.7.8.4, “KILL Statement”。
示例SHOW PROCESSLIST
输出:
mysql> SHOW FULL PROCESSLIST\G
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db: NULL
Command: Connect
Time: 1030455
State: Waiting for source to send event
Info: NULL
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 1004
State: Has read all relay log; waiting for the replica
I/O thread to update it
Info: NULL
*************************** 3. row ***************************
Id: 3112
User: replikator
Host: artemis:2204
db: NULL
Command: Binlog Dump
Time: 2144
State: Has sent all binlog to replica; waiting for binlog to be updated
Info: NULL
*************************** 4. row ***************************
Id: 3113
User: replikator
Host: iconnect2:45781
db: NULL
Command: Binlog Dump
Time: 2086
State: Has sent all binlog to replica; waiting for binlog to be updated
Info: NULL
*************************** 5. row ***************************
Id: 3123
User: stefan
Host: localhost
db: apollon
Command: Query
Time: 0
State: NULL
Info: SHOW FULL PROCESSLIST
SHOW PROCESSLIST
输出具有这些列:
-
连接标识符。这与
INFORMATION_SCHEMA
PROCESSLIST
表中的ID
列相同,同样与threads
表中的PROCESSLIST_ID
列相同,并且由CONNECTION_ID()
函数在线程中返回。 -
发出的语句的 MySQL 用户。值为
system user
表示服务器内部生成的非客户端线程,例如延迟行处理线程或 I/O (接收器) 或 SQL (应用程序) 线程用于副本主机。对于system user
,没有指定主机在Host
列中。unauthenticated user
表示线程已经与客户端连接关联,但客户端用户还没有进行身份验证。event_scheduler
表示监控计划事件的线程(见第27.4节,“使用事件调度器”)。Note一个
User
值为system user
与SYSTEM_USER
权限不同。前者标识内部线程。后者区分系统用户和常规用户帐户类别(见第8.2.11节,“帐户类别”)。 -
发出的语句的客户端主机(除非
system user
,否则没有主机)。TCP/IP 连接的主机名在
格式中报告,以便更容易确定哪个客户端正在做什么。host_name
:client_port
-
线程的默认数据库(或
NULL
如果没有选择)。 -
该线程正在为客户端执行的命令类型,或者如果会话处于空闲状态,则为
Sleep
。关于线程命令的描述,请参见第10.14节,“Examining Server Thread (Process) Information”。该列的值对应于客户端/服务器协议中的COM_
命令和xxx
Com_
状态变量。请参见第7.1.10节,“Server Status Variables”。xxx
-
该线程在当前状态中所用的秒数。对于复制SQL线程,值是从最后一个复制事件的时间戳到复制主机的实际时间的秒数。请参见第19.2.3节,“Replication Threads”。
-
一个动作、事件或状态,表明线程正在做什么。关于
State
值的描述,请参见第10.14节,“Examining Server Thread (Process) Information”。大多数状态对应于非常快速的操作。如果线程在给定的状态中停留了许多秒,那么可能需要调查一下问题。
-
线程正在执行的语句,或者如果它正在执行无语句,则为
NULL
。语句可能是发送到服务器的语句,也可能是执行其他语句的最内层语句。例如,如果一个CALL
语句执行一个存储过程,该存储过程正在执行一个SELECT
语句,那么Info
值将显示SELECT
语句。