#### 27.12.21.5 进程列表表

[](<>)[](<>)[](<>)

MySQL 进程列表指示当前由服务器内执行的线程集执行的操作。这[`进程列表`](performance-schema-processlist-table.html)表是过程信息的一种来源。有关此表与其他来源的比较，请参阅[过程信息的来源](processlist-access.html#processlist-sources).

这[`进程列表`](performance-schema-processlist-table.html)表可以直接查询。如果你有[`过程`](privileges-provided.html#priv_process)权限，您可以查看所有线程，甚至是属于其他用户的线程。否则（没有[`过程`](privileges-provided.html#priv_process)特权），非匿名用户可以访问有关他们自己的线程的信息，但不能访问其他用户的线程，匿名用户无权访问线程信息。

笔记

如果[`performance_schema_show_processlist`](performance-schema-system-variables.html#sysvar_performance_schema_show_processlist)系统变量启用时，[`进程列表`](performance-schema-processlist-table.html)表还可以作为基础的替代实现的基础[`显示进程列表`](show-processlist.html)陈述。有关详细信息，请参阅本节后面的内容。

这[`进程列表`](performance-schema-processlist-table.html)表包含每个服务器进程的一行：

```
mysql> SELECT * FROM performance_schema.processlist\G
*************************** 1. row ***************************
     ID: 5
   USER: event_scheduler
   HOST: localhost
     DB: NULL
COMMAND: Daemon
   TIME: 137
  STATE: Waiting on empty queue
   INFO: NULL
*************************** 2. row ***************************
     ID: 9
   USER: me
   HOST: localhost:58812
     DB: NULL
COMMAND: Sleep
   TIME: 95
  STATE:
   INFO: NULL
*************************** 3. row ***************************
     ID: 10
   USER: me
   HOST: localhost:58834
     DB: test
COMMAND: Query
   TIME: 0
  STATE: executing
   INFO: SELECT * FROM performance_schema.processlist
...
```

这[`进程列表`](performance-schema-processlist-table.html)表有这些列：

-   `ID`

    连接标识符。这与显示在`Id`的列[`显示进程列表`](show-processlist.html)声明，显示在`PROCESSLIST_ID`性能模式的列[`线程`](performance-schema-threads-table.html)表，并由[`CONNECTION_ID()`](information-functions.html#function_connection-id)线程内的函数。

-   `用户`

    发出语句的 MySQL 用户。一个值`系统用户`指由服务器生成的用于在内部处理任务的非客户端线程，例如，延迟行处理程序线程或副本主机上使用的 I/O 或 SQL 线程。为了`系统用户`, 中没有指定主机`主持人`柱子。`未经身份验证的用户`指已与客户端连接关联但尚未发生客户端用户身份验证的线程。`event_scheduler`指的是监控预定事件的线程（参见[第 25.4 节，“使用事件调度程序”](event-scheduler.html)）。

    笔记

    一种`用户`的价值`系统用户`不同于[`SYSTEM_USER`](privileges-provided.html#priv_system-user)特权。前者指定内螺纹。后者区分系统用户和普通用户帐户类别（请参阅[第 6.2.11 节，“帐户类别”](account-categories.html)）。

-   `主持人`

    发出语句的客户端的主机名（除了`系统用户`，没有主机）。TCP/IP 连接的主机名报告在`*`主机名`*:*`客户端端口`*`格式以便更容易确定哪个客户端在做什么。

-   `D B`

    线程的默认数据库，或`空值`如果没有选择。

-   `命令`

    线程代表客户端执行的命令类型，或`睡觉`如果会话空闲。有关线程命令的说明，请参见[第 8.14 节，“检查服务器线程（进程）信息”](thread-information.html).该列的值对应于`COM_*`xxx`*`客户端/服务器协议的命令和`Com_*`xxx`*`状态变量。看[第 5.1.10 节，“服务器状态变量”](server-status-variables.html)

-   `时间`

    线程处于当前状态的时间（以秒为单位）。对于副本 SQL 线程，该值是上次复制事件的时间戳与副本主机的实际时间之间的秒数。看[第 17.2.3 节，“复制线程”](replication-implementation-details.html).

-   `状态`

    指示线程正在做什么的动作、事件或状态。对于描述`状态`值，见[第 8.14 节，“检查服务器线程（进程）信息”](thread-information.html).

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

-   `信息`

    线程正在执行的语句，或`空值`如果它不执行任何语句。如果该语句执行其他语句，则该语句可能是发送到服务器的语句，或者是最内层的语句。例如，如果一个`称呼`语句执行正在执行的存储过程[`选择`](select.html)声明`信息`值显示[`选择`](select.html)陈述。

    这[`进程列表`](performance-schema-processlist-table.html)表有这些索引：

-   主键打开 (`ID`)

[`截断表`](truncate-table.html)不允许[`进程列表`](performance-schema-processlist-table.html)桌子。

如前所述，如果[`performance_schema_show_processlist`](performance-schema-system-variables.html#sysvar_performance_schema_show_processlist)系统变量启用时，[`进程列表`](performance-schema-processlist-table.html)表作为其他流程信息源的替代实现的基础：

-   这[`显示进程列表`](show-processlist.html)陈述。

-   这[**mysqladmin 进程列表**](mysqladmin.html)命令（它使用[`显示进程列表`](show-processlist.html)陈述）。

    默认[`显示进程列表`](show-processlist.html)实现从线程管理器中遍历活动线程，同时持有一个全局互斥锁。这会对性能产生负面影响，尤其是在繁忙的系统上。替代方案[`显示进程列表`](show-processlist.html)实现基于性能模式[`进程列表`](performance-schema-processlist-table.html)桌子。此实现从性能模式而不是线程管理器查询活动线程数据，并且不需要互斥锁。

    MySQL 配置影响[`进程列表`](performance-schema-processlist-table.html)表格内容如下：

-   最低要求配置：

    -   MySQL 服务器必须在启用线程检测的情况下配置和构建。默认情况下是这样；它是使用控制[`DISABLE_PSI_THREAD`](source-configuration-options.html#option_cmake_disable_psi_thread) **制作**选项。

    -   性能模式必须在服务器启动时启用。默认情况下是这样；它是使用控制[`性能模式`](performance-schema-system-variables.html#sysvar_performance_schema)系统变量。

        满足该配置后，[`performance_schema_show_processlist`](performance-schema-system-variables.html#sysvar_performance_schema_show_processlist)启用或禁用替代方案[`显示进程列表`](show-processlist.html)执行。如果不满足最低配置，则[`进程列表`](performance-schema-processlist-table.html)表（因此[`显示进程列表`](show-processlist.html)) 可能不会返回所有数据。

-   推荐配置：

    -   为避免忽略某些线程：

        -   离开[`performance_schema_max_thread_instances`](performance-schema-system-variables.html#sysvar_performance_schema_max_thread_instances)系统变量设置为其默认值或将其设置为至少与[`最大连接数`](server-system-variables.html#sysvar_max_connections)系统变量。

        -   离开[`performance_schema_max_thread_classes`](performance-schema-system-variables.html#sysvar_performance_schema_max_thread_classes)系统变量设置为其默认值。

    -   为了避免有一些`状态`列值为空，保留[`performance_schema_max_stage_classes`](performance-schema-system-variables.html#sysvar_performance_schema_max_stage_classes)系统变量设置为其默认值。

        这些配置参数的默认值是`-1`，这会导致性能架构在服务器启动时自动调整它们的大小。按照指示设置参数后，[`进程列表`](performance-schema-processlist-table.html)表（因此[`显示进程列表`](show-processlist.html)) 产生完整的过程信息。

    前面的配置参数会影响`进程列表`桌子。然而，对于给定的配置，[`进程列表`](performance-schema-processlist-table.html)内容不受影响[`performance_schema_show_processlist`](performance-schema-system-variables.html#sysvar_performance_schema_show_processlist)环境。

    替代流程列表实施不适用于`INFORMATION_SCHEMA` [`进程列表`](information-schema-processlist-table.html)表或`COM_PROCESS_INFO`MySQL 客户端/服务器协议的命令。
