processlist对于新安装的 MySQL 5.7.39 或更高版本,
该表会在性能模式中自动创建。它也是由升级自动创建的。
MySQL 进程列表指示当前由服务器内执行的一组线程执行的操作。该processlist表是过程信息的来源之一。有关此表与其他来源的比较,请参阅
流程信息来源。
表processlist可以直接查询。如果您有
PROCESS权限,您可以看到所有线程,甚至是属于其他用户的线程。否则(没有PROCESS
特权),非匿名用户可以访问关于他们自己的线程的信息,但不能访问其他用户的线程,而匿名用户则不能访问线程信息。
如果
performance_schema_show_processlist
启用了系统变量,则该
processlist表还可以作为SHOW PROCESSLIST
语句基础的替代实现的基础。有关详细信息,请参阅本节后面的内容。
该processlist表包含每个服务器进程的一行:
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
...
该processlist表有以下列:
ID连接标识符。这与语句
Id列中 显示的值、Performance Schema 表列中显示的值 以及线程内 的函数返回的值相同。SHOW PROCESSLISTPROCESSLIST_IDthreadsCONNECTION_ID()USER发出语句的 MySQL 用户。值是
system user指由服务器产生的非客户端线程来处理内部任务,例如,延迟行处理程序线程或副本主机上使用的 I/O 或 SQL 线程。对于system user,列中没有指定主机Host。unauthenticated user指的是已与客户端连接相关联但尚未对客户端用户进行身份验证的线程。event_scheduler指的是监视计划事件的线程(请参阅 第 23.4 节,“使用事件计划程序”)。笔记的
USER值system user与SYSTEM_USER特权不同。前者表示内螺纹。后者区分系统用户和普通用户帐户类别(请参阅帐户类别)。HOST发出语句的客户端的主机名(除了
system user,它没有主机)。TCP/IP 连接的主机名以 格式报告,以便更容易确定哪个客户端正在做什么。host_name:client_portDB线程的默认数据库,或者
NULL如果未选择任何数据库。COMMAND线程代表客户端执行的命令类型,或者
Sleep会话是否空闲。有关线程命令的说明,请参阅 第 8.14 节,“检查服务器线程(进程)信息”。此列的值对应于 客户端/服务器协议和 状态变量的命令。参见 第 5.1.9 节,“服务器状态变量”COM_xxxCom_xxxTIME线程处于其当前状态的时间(以秒为单位)。对于副本 SQL 线程,该值是最后一个复制事件的时间戳与副本主机的实际时间之间的秒数。请参阅第 16.2.3 节,“复制线程”。
STATE指示线程正在做什么的操作、事件或状态。有关
STATE值的说明,请参阅第 8.14 节,“检查服务器线程(进程)信息”。大多数状态对应于非常快速的操作。如果线程在给定状态下停留数秒,则可能存在需要调查的问题。
INFO线程正在执行的语句,或者
NULL如果它没有执行任何语句。该语句可能是发送到服务器的语句,如果该语句执行其他语句,则可能是最里面的语句。例如,如果一个CALL语句执行一个正在执行SELECT语句的存储过程,则该INFO值显示该SELECT语句。EXECUTION_ENGINE查询执行引擎。值为
PRIMARY或SECONDARY。与 MySQL 数据库服务和 HeatWave 一起使用,其中引擎PRIMARY为 HeatWave ( )。对于没有 HeatWave 的 MySQL Community Edition Server、MySQL Enterprise Edition Server(内部部署)和 MySQL Database Service,值始终为。此列是在 MySQL 8.0.29 中添加的。InnoDBSECONDARYRAPIDPRIMARY
TRUNCATE TABLE不允许用于processlist表。
如前所述,如果
performance_schema_show_processlist
启用了系统变量,则该
processlist表将作为其他流程信息源的替代实施的基础:
SHOW PROCESSLIST声明 。mysqladmin processlist命令(使用 语句
SHOW PROCESSLIST)。
默认SHOW PROCESSLIST
实现在线程管理器中遍历活动线程,同时持有全局互斥锁。这会对性能产生负面影响,尤其是在繁忙的系统上。替代SHOW PROCESSLIST
实现基于 Performance Schema
processlist表。此实现从性能模式而不是线程管理器查询活动线程数据,并且不需要互斥体。
MySQL 配置影响
processlist表内容如下:
最低要求配置:
必须在启用线程检测的情况下配置和构建 MySQL 服务器。默认情况下是这样;它是使用 CMake选项控制的。
DISABLE_PSI_THREAD性能模式必须在服务器启动时启用。默认情况下是这样;它是使用
performance_schema系统变量控制的。
满足该配置后,
performance_schema_show_processlist启用或禁用替代SHOW PROCESSLIST实现。如果不满足最低配置,该processlist表(因此SHOW PROCESSLIST)可能不会返回所有数据。推荐配置:
为避免忽略某些线程:
将
performance_schema_max_thread_instances系统变量设置为默认值或至少将其设置为与max_connections系统变量一样大。将
performance_schema_max_thread_classes系统变量设置为其默认值。
为避免某些
STATE列值为空,请将performance_schema_max_stage_classes系统变量设置为默认值。
这些配置参数的默认值是
-1,这会导致 Performance Schema 在服务器启动时自动调整它们的大小。按照指示设置参数,processlist表格(以及因此SHOW PROCESSLIST)产生完整的过程信息。
前面的配置参数影响processlist表的内容。但是,对于给定的配置,
processlist内容不受
performance_schema_show_processlist
设置的影响。
替代进程列表实现不适用于 MySQL 客户端/服务器协议的INFORMATION_SCHEMA
PROCESSLIST表或
COM_PROCESS_INFO命令。