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
连接标识符。这与
SHOW PROCESSLIST
语句的Id
列中显示的值相同,与性能架构threads
表的PROCESSLIST_ID
列中显示的值相同,并且由线程内的CONNECTION_ID()
函数返回。USER
发出语句的 MySQL 用户。值
system user
指的是由服务器内部生成的非客户端线程来处理任务,例如延迟行处理线程或在复制主机上使用的 I/O 或 SQL 线程。对于system user
,Host
列中没有指定主机。unauthenticated user
指的是已与客户端连接相关联但其客户端用户的身份验证尚未发生的线程。event_scheduler
指的是监视计划事件的线程(请参阅 第 27.5 节,“使用事件调度器”)。注意USER
值system user
与SYSTEM_USER
权限不同。前者表示内部线程。后者区分系统用户和普通用户帐户类别(请参阅 第 8.2.11 节,“帐户类别”)。HOST
发出语句的客户端的主机名(
system user
除外,后者没有主机)。TCP/IP 连接的主机名以
格式报告,以便于确定哪个客户端在执行什么操作。host_name
:client_port
DB
线程的默认数据库,或者如果未选择任何数据库,则为
NULL
。COMMAND
线程代表客户端执行的命令类型,或者如果会话处于空闲状态,则为
Sleep
。有关线程命令的描述,请参见 第 10.14 节,“检查服务器线程(进程)信息”。此列的值对应于客户端/服务器协议的COM_
命令和xxx
Com_
状态变量。请参见 第 7.1.10 节,“服务器状态变量”xxx
时间
线程处于当前状态的时间(以秒为单位)。对于副本 SQL 线程,该值为上次复制事件的时间戳与副本主机实际时间之间的时间差(以秒为单位)。请参见 第 19.2.3 节,“复制线程”.
状态
指示线程正在执行的操作、事件或状态。有关
STATE
值的描述,请参见 第 10.14 节,“检查服务器线程(进程)信息”.大多数状态对应于非常快的操作。如果线程在给定状态下保持数秒,则可能存在需要调查的问题。
信息
线程正在执行的语句,或者如果它没有执行任何语句,则为
NULL
。该语句可能是发送到服务器的语句,或者如果该语句执行其他语句,则可能是最内层的语句。例如,如果一个CALL
语句执行一个存储过程,该存储过程正在执行一个SELECT
语句,则INFO
值显示SELECT
语句。执行引擎
查询执行引擎。该值为
PRIMARY
或SECONDARY
。对于 HeatWave 服务和 HeatWave,其中PRIMARY
引擎为InnoDB
,而SECONDARY
引擎为 HeatWave (RAPID
)。对于 MySQL 社区版服务器、MySQL 企业版服务器(本地部署)以及没有 HeatWave 的 HeatWave 服务,该值始终为PRIMARY
。
processlist
表具有以下索引
主键为 (
ID
)
对于 processlist
表,不允许使用 TRUNCATE TABLE
。
如前所述,如果启用了 performance_schema_show_processlist
系统变量,则 processlist
表将作为其他进程信息源的替代实现的基础
SHOW PROCESSLIST
语句。mysqladmin processlist 命令(使用
SHOW PROCESSLIST
语句)。
默认 SHOW PROCESSLIST
实现会从线程管理器中遍历活动线程,同时保持全局互斥锁。这会对性能产生负面影响,尤其是在繁忙的系统上。替代的 SHOW PROCESSLIST
实现基于 Performance Schema processlist
表。此实现从 Performance Schema 而不是线程管理器查询活动线程数据,不需要互斥锁。
MySQL 配置会影响 processlist
表的内容,如下所示
最低要求配置
MySQL 服务器必须配置并构建为启用线程检测。默认情况下这是真的;它由
DISABLE_PSI_THREAD
CMake 选项控制。Performance Schema 必须在服务器启动时启用。默认情况下这是真的;它由
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
设置的影响。
替代进程列表实现不适用于 INFORMATION_SCHEMA
PROCESSLIST
表或 MySQL 客户端/服务器协议的 COM_PROCESS_INFO
命令。