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()函数返回的值相同。用户发出语句的 MySQL 用户。
system user值是指由服务器在内部生成以处理任务的非客户端线程,例如,延迟行处理程序线程或在副本主机上使用的 I/O 或 SQL 线程。对于system user,Host列中没有指定主机。unauthenticated user指的是已与客户端连接关联但尚未对客户端用户进行身份验证的线程。event_scheduler指的是监视计划事件的线程(请参阅第 27.4 节“使用事件调度程序”)。注意system user的USER值与SYSTEM_USER权限不同。前者指定内部线程。后者区分系统用户和普通用户帐户类别(请参阅第 8.2.11 节“帐户类别”)。主机发出语句的客户端的主机名(
system user除外,它没有主机)。TCP/IP 连接的主机名以格式报告,以便更轻松地确定哪个客户端正在执行什么操作。host_name:client_port数据库线程的默认数据库,如果未选择任何数据库,则为
NULL。命令线程代表客户端执行的命令类型,如果会话处于空闲状态,则为
Sleep。有关线程命令的说明,请参见 第 10.14 节“检查服务器线程(进程)信息”。此列的值对应于客户端/服务器协议的COM_命令和xxxCom_状态变量。请参见 第 7.1.10 节“服务器状态变量”xxxTIME线程处于当前状态的时间(以秒为单位)。对于副本 SQL 线程,该值是最后一个复制事件的时间戳与副本主机实时之间的时间差(以秒为单位)。请参见 第 19.2.3 节“复制线程”。
STATE表示线程正在执行的操作、事件或状态。有关
STATE值的说明,请参见 第 10.14 节“检查服务器线程(进程)信息”。大多数状态对应于非常快的操作。如果一个线程在给定状态下停留数秒,则可能存在需要调查的问题。
INFO线程正在执行的语句,如果未执行任何语句,则为
NULL。该语句可以是发送到服务器的语句,也可以是最里面的语句(如果该语句执行其他语句)。例如,如果CALL语句执行一个存储过程,而该存储过程正在执行SELECT语句,则INFO值将显示该SELECT语句。EXECUTION_ENGINE查询执行引擎。值为
PRIMARY或SECONDARY。用于 HeatWave Service 和 HeatWave,其中PRIMARY引擎为InnoDB,SECONDARY引擎为 HeatWave (RAPID)。对于 MySQL Community Edition Server、MySQL Enterprise Edition Server(本地部署)以及没有 HeatWave 的 HeatWave Service,该值始终为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_THREADCMake 选项对其进行控制。必须在服务器启动时启用 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 命令。