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
列中显示的值,也是 Performance Schemathreads
表的PROCESSLIST_ID
列中的值,并且是CONNECTION_ID()
函数在线程中的返回值。 -
USER
发出语句的 MySQL 用户。值
system user
指的是服务器内部生成的非客户端线程,例如延迟行处理器线程或副本主机上的 I/O 或 SQL 线程。unauthenticated user
指的是已经与客户端连接关联的线程,但尚未进行客户端用户身份验证。event_scheduler
指的是监视计划事件的线程(请参阅 第 27.4 节,“使用事件计划程序”)。NoteUSER
值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 节,“复制线程”。
-
状态
线程正在执行的操作、事件或状态。有关
状态
值的描述,请参阅 第 10.14 节,“检查服务器线程(进程)信息”。大多数状态对应非常快速的操作。如果线程停留在给定状态很长时间,可能需要调查问题。
-
信息
线程正在执行的语句,或者如果它不执行语句,则为
NULL
。该语句可能是发送到服务器的语句,或者如果语句执行其他语句,则为最内部语句。例如,如果CALL
语句执行存储过程,该过程执行SELECT
语句,则信息
值将显示SELECT
语句。 -
执行引擎
查询执行引擎。该值是
PRIMARY
或SECONDARY
。用于 MySQL HeatWave 服务和 HeatWave,其中PRIMARY
引擎是InnoDB
,SECONDARY
引擎是 HeatWave (RAPID
)。对于 MySQL Community Edition 服务器、MySQL Enterprise Edition 服务器(on-premise)和不带 HeatWave 的 MySQL HeatWave 服务,该值始终是PRIMARY
。
该 processlist
表具有以下索引:
-
主键在 (
ID
)
TRUNCATE TABLE
不允许用于 processlist
表。
如前所述,如果 performance_schema_show_processlist
系统变量启用,则 processlist
表将作为其他进程信息来源的基础:
-
该
SHOW PROCESSLIST
语句。 -
该 mysqladmin processlist 命令(使用
SHOW PROCESSLIST
语句)。
默认的 SHOW PROCESSLIST
实现会在线程管理器中遍历活动线程,同时持有全局互斥锁。这会对性能产生负面影响,特别是在繁忙的系统上。基于 Performance Schema 的 SHOW PROCESSLIST
实现从 Performance Schema 中查询活动线程数据,而不需要互斥锁。
MySQL 配置会影响 processlist
表的内容,如下所示:
-
最小配置要求:
-
MySQL 服务器必须配置和构建启用线程仪表功能。这是默认情况;它是使用
DISABLE_PSI_THREAD
CMake 选项控制的。 -
性能模式必须在服务器启动时启用。这是默认情况;它是使用
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
,这将导致性能模式在服务器启动时自动调整它们。使用这些参数设置,processlist
表(因此SHOW PROCESSLIST
)将生成完整的进程信息。 -
前面的配置参数影响 processlist
表的内容。但是,对于给定的配置,processlist
表的内容不受 performance_schema_show_processlist
设置的影响。
替代进程列表实现不适用于 INFORMATION_SCHEMA
PROCESSLIST
表或 MySQL 客户端/服务器协议的 COM_PROCESS_INFO
命令。