13.7.5.29 SHOW PROCESSLIST 语句

SHOW [FULL] PROCESSLIST

MySQL 进程列 table 指示服务器内部正在执行的一组线程当前正在执行的操作。 SHOW PROCESSLIST语句是过程信息的一种来源。有关此声明与其他来源的比较,请参见Process信息来源

如果您具有PROCESS特权,则可以查看所有线程,甚至包括属于其他用户的那些线程。否则(没有PROCESS特权),非匿名用户有权访问有关其自己线程的信息,而其他用户则不能访问线程,并且匿名用户无权访问线程信息。

如果没有FULL关键字,则SHOW PROCESSLISTInfo字段中仅显示每个语句的前 100 个字符。

如果收到“连接过多”错误消息并想了解发生了什么,则SHOW PROCESSLIST语句非常有用。 MySQL 保留一个额外的连接,以供拥有SUPER特权的帐户使用,以确保 Management 员始终能够连接并检查系统(假设您没有将此特权授予所有用户)。

可以使用KILL语句杀死线程。参见第 13.7.6.4 节“ KILL 语句”

SHOW PROCESSLIST输出示例:

mysql> SHOW FULL PROCESSLIST\G
*************************** 1. row ***************************
     Id: 1
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 1030455
  State: Waiting for master 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 slave
         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 slave; 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 slave; 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输出包含以下列:

  • Id

连接标识符。此值与INFORMATION_SCHEMA PROCESSLISTtable 的ID列,性能模式threadstable 的PROCESSLIST_ID列中显示的值相同,并由线程中的CONNECTION_ID()函数返回。

  • User

发出该语句的 MySQL 用户。值system usertable 示服务器产生的非 Client 端线程,以在内部处理任务,例如,延迟行处理程序线程或副本主机上使用的 I/O 或 SQL 线程。对于system user,在Host列中未指定主机。 unauthenticated user是指已与 Client 端连接关联但尚未对其进行 Client 端用户身份验证的线程。 event_scheduler是指监视计划的事件的线程(请参见第 23.4 节“使用事件计划程序”)。

  • Host

发出该语句的 Client 端的主机名(system user除外,该主机没有主机)。 TCP/IP 连接的主机名以host_name:client_port格式报告,以便更轻松地确定哪个 Client 端在做什么。

  • db

线程的默认数据库,如果未选择则为NULL

  • Command

线程代 tableClient 端执行的命令类型;如果会话空闲,则返回Sleep。有关线程命令的说明,请参见第 8.14 节“检查服务器线程(进程)信息”。该列的值对应于 Client 机/服务器协议的COM_xxx命令和Com_xxx状态变量。参见第 5.1.9 节“服务器状态变量”

  • Time

线程处于其当前状态的时间(以秒为单位)。对于副本 SQL 线程,该值是最后一个复制事件的时间戳与副本主机的实时之间的秒数。参见第 16.2.2 节“复制实现的详细信息”

  • State

指示线程正在执行的操作,事件或状态。有关State个值的说明,请参见第 8.14 节“检查服务器线程(进程)信息”

大多数状态对应于非常快速的操作。如果线程在给定状态下停留许多秒钟,则可能存在需要调查的问题。

  • Info

线程正在执行的语句,如果不执行任何语句,则返回NULL。该语句可能是发送到服务器的那条语句,或者是最内部的语句(如果该语句执行其他语句)。例如,如果CALL语句执行了正在执行SELECT语句的存储过程,则Info值将显示SELECT语句。