Mysql 简明教程

MySQL - Show Processlist

MySQL 数据库提供了一个多用户环境,允许多个客户端同时访问数据库。一个进程被定义为一个用户在 MySQL 服务器上执行的操作。多个用户可以同时在 MySQL 服务器上同时运行多个进程。

What is MySQL Process List?

MySQL process list 被定义为当前由在服务器内执行的用户线程集执行的操作列表。

如果用户拥有 PROCESS 特权,他们可以看到服务器上的所有线程,包括其他用户的线程。但是,如果一个用户没有这样的特权,则非匿名用户只能访问有关他们自己的线程的信息;而匿名用户不能访问线程信息。

要检索有关在 MySQL 服务器上运行的这些进程的信息,我们可以使用 SHOW PROCESSLIST 命令。

The MySQL SHOW PROCESSLIST Command

MySQL SHOW PROCESSLIST 命令用于显示有关在 MySQL 服务器上运行的当前进程的信息。

这个语句在处理“太多连接”错误时特别有用,因为它提供了有关这些连接及其操作的详细信息。此外,MySQL 为具有 CONNECTION_ADMIN 特权(或旧版本中的 SUPER 特权)的管理员保留了一个额外的连接,以确保他们始终可以访问系统。

Syntax

以下是 SHOW PROCESSLIST 命令的语法 −

SHOW [FULL] PROCESSLIST

这里,FULL 关键字是可选的。但是,如果您省略 FULL 关键字,SHOW PROCESSLIST 仅显示信息字段中每个语句的前 100 个字符。

Example

让我们看一个示例来说明 SHOW PROCESSLIST 命令的用法。我们将使用 '\G' 分隔符垂直打印信息表 −

SHOW PROCESSLIST\G

Output

以下是所获得的输出 −

*************************** 1. row ***************************
     Id: 5
   User: event_scheduler
   Host: localhost
     db: NULL
Command: Daemon
   Time: 1065209
  State: Waiting on empty queue
   Info: NULL
*************************** 2. row ***************************
     Id: 56
   User: root
   Host: localhost:51995
     db: customers
Command: Query
   Time: 0
  State: init
   Info: SHOW PROCESSLIST
2 rows in set (0.00 sec)

Example

现在,我们还可以在 SHOW PROCESSLIST 命令中使用 FULL 关键字,如下例所示 −

SHOW FULL PROCESSLIST\G

Output

获得的输出如下所示 −

*************************** 1. row ***************************
     Id: 5
   User: event_scheduler
   Host: localhost
     db: NULL
Command: Daemon
   Time: 1065138
  State: Waiting on empty queue
   Info: NULL
*************************** 2. row ***************************
     Id: 56
   User: root
   Host: localhost:51995
     db: customers
Command: Query
   Time: 0
  State: init
   Info: SHOW FULL PROCESSLIST
2 rows in set (0.00 sec)

Output Explanation

从 SHOW PROCESSLIST 命令获得的输出结果集具有以下列 −

  1. Id − 它是连接的身份。

  2. User − 这保存了发出该语句的 MySQL 用户的名称。

  3. Host − 发出该语句的客户端的主机名(系统用户除外,因为它没有主机)。TCP/IP 连接的主机名以“host_name:client_port”格式表示,以便更容易确定客户端的操作。

  4. db − 这是该线程的默认数据库,如果没有选择,则为 NULL。

  5. Command − 显示了相应线程代表客户端执行的命令类型,或者如果会话处于空闲状态,则显示 Sleep。

  6. Time − 线程在当前状态下所花费的时间(以秒为单位)。

  7. State − 表示线程正在做什么的一个动作、事件或状态。大多数状态对应于非常快速的操作。如果一个线程在给定状态下停留很多秒,则可能存在需要调查的问题。

  8. Info − 执行中的线程语句。如果线程中没有任何语句在执行,则显示 NULL。

Showing Process List Using Client Program

我们还可以使用客户端程序来展示进程列表。

Syntax

Example

以下是这些程序 −