29.12.22.7 进程列表表
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.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
-
TIME
线程处于当前状态的时间,单位为秒。对于复制SQL线程,这个值是从最后一个复制事件的时间戳到副本主机的真实时间之间的秒数。请参阅第19.2.3节,“复制线程”
-
STATE
表示线程正在做什么的动作、事件或状态。有关
STATE
值的描述,请参阅第10.14节,“查看服务器线程(进程)信息”大多数状态对应于非常快速的操作。如果线程在某个状态下停留了很多秒,那么可能需要调查一下存在的问题。
-
INFO
线程正在执行的语句,或者如果它正在执行无语句,则为
NULL
。该语句可能是发送到服务器的语句,或者如果语句执行其他语句,则为内层语句。例如,如果一个CALL
语句执行存储过程,该存储过程正在执行一个SELECT
语句,INFO
值显示的就是SELECT
语句。 -
EXECUTION_ENGINE
查询执行引擎的值是
PRIMARY
或SECONDARY
。对于MySQL HeatWave服务和HeatWave,PRIMARY
引擎为InnoDB
,而SECONDARY
引擎为HeatWave(RAPID
)。对于MySQL Community Edition Server、MySQL Enterprise Edition Server(本地部署)和MySQL HeatWave服务(不包括HeatWave),值始终为PRIMARY
性能模式的processlist
表有以下索引:
-
主键在(
ID
)上
TRUNCATE TABLE
不允许在processlist
表上执行。
如前所述,如果启用了performance_ schema_show_processlist
系统变量,processlist
表将作为其他进程信息源的替代实现基础:
-
mysqladmin processlist命令(使用
SHOW PROCESSLIST
语句)。
默认的SHOW PROCESSLIST
实现从线程管理器内部迭代活动线程,同时持有全局互斥锁。这对忙碌系统来说具有负面性能影响。基于性能模式processlist
表的替代实现查询活动线程数据从性能模式,而不是线程管理器,并不需要互斥锁。
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
命令。