MySQL8.x 中 performance_schema 下 processlist表的说明
MySQL8.x 中 performance_schema 下 processlist表的说明
- 最近在研究一个MySQL数据库的监控相关功能的系统的实现,因此专门研究了一下processlist表。processlist表为MySQL的核心表之一。MySQL processlist 表示当前由服务器内执行的线程集执行的操作。 进程列表表是进程信息的来源之一
INFORMATION_SCHEMA 库中的 PROCESSLIST在8.0以后的版本被标记为弃用,并将在未来的 MySQL 版本中被移除。因此,使用此表的 SHOW PROCESSLIST 的实现也已被弃用。建议改用 performance_schema 实现的 processlist。
在结构上,两张表的结构基本相同,高版本中performance_schema下的表比infomation_schema中表多一个execution_engine(执行引擎)字段
processlist表可以直接被访问。如果用户拥有 PROCESS权限,则可以访问所有线程的信息(包含其他用户的线程信息)。非匿名用户可以访问自己的线程信息、但不能访问其他用户的线程信息,匿名用户无法访问processlist中的线程信息。
1. 使用方法:
mysql> select * from performance_schema.processlist\G;
*************************** 1. row ***************************
ID: 5
USER: event_scheduler
HOST: localhost
DB: NULL
COMMAND: Daemon
TIME: 21411
STATE: Waiting on empty queue
INFO: NULL
*************************** 2. row ***************************
ID: 714
USER: root
HOST: localhost
DB: performance_schema
COMMAND: Query
TIME: 0
STATE: executing
INFO: select * from performance_schema.processlist
2 rows in set (0.00 sec)
2. 表结构:
mysql> desc processlist;
+---------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------------+------+-----+---------+-------+
| ID | bigint unsigned | NO | PRI | NULL | |
| USER | varchar(32) | YES | | NULL | |
| HOST | varchar(261) | YES | | NULL | |
| DB | varchar(64) | YES | | NULL | |
| COMMAND | varchar(16) | YES | | NULL | |
| TIME | bigint | YES | | NULL | |
| STATE | varchar(64) | YES | | NULL | |
| INFO | longtext | YES | | NULL | |
+---------+-----------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
3.字段说明
- ID
连接标识符。这是在 SHOW PROCESSLIST 语句的 Id 列中显示的相同值,显示在 Performance Schema 线程表的 PROCESSLIST_ID 列中,并在线程内通过 CONNECTION_ID() 函数返回的值相同。
- USER
发出该语句的 MySQL 用户。system user 的值指的是由服务器生成的非客户端线程,用于在内部处理任务,例如延迟行处理线程或在复制主机上用于处理 I/O 或 SQL 的线程。对于 system user,Host 列中没有指定主机。unauthenticated user 指的是已与客户端连接关联但尚未对客户端用户进行身份验证的线程。event_scheduler 指的是监视预定事件的线程。
- HOST
发出该语句的客户端的主机名(对于 system user 则没有主机)。对于 TCP/IP 连接,主机名以 host:port(主机地址:端口) 的格式显示,以便更容易确定哪个客户端在执行什么操作。
- DB
线程的默认数据库,如果未选择任何数据库,则为 NULL。
- COMMAND
线程代表客户端执行的命令类型,如果会话处于空闲状态,则为 Sleep。此列的值对应于客户端/服务器协议的 COM_xxx 命令和 Com_xxx 状态变量。
- TIME
线程在当前状态下已经经过的时间,以秒为单位。对于复制 SQL 线程,该值是上一个复制事件的时间戳与复制主机的实际时间之间的秒数。
- STATE
一个动作、事件或状态,表示线程正在进行的操作。大多数状态对应非常快速的操作。如果一个线程在特定状态停留了很多秒,可能存在需要调查的问题。
- INFO
线程正在执行的语句,如果没有执行语句则为 NULL。该语句可以是发送给服务器的语句,或者如果该语句执行其他语句,则为最内层的语句。
- EXECUTION_ENGINE
查询执行引擎。该值可以是 PRIMARY 或 SECONDARY。在 MySQL HeatWave Service 和 HeatWave 中使用,其中 PRIMARY 引擎是 InnoDB,而 SECONDARY 引擎是 HeatWave(RAPID)。对于社区版本、企业版(本地部署)以及没有 HeatWave 的 MySQL HeatWave Service,该值始终为 PRIMARY。
4. COMMAND和STATE字段值说明
- COMMAND字段说明:
Binlog Dump
表示这是一个在复制源上的线程,负责将二进制日志内容发送到副本Change user
表示该线程正在执行一个改变用户操作Close stmt
该线程正在关闭一个 prepared statement.Connect
被连接到源的复制接收线程和复制工作线程使用。Connect Out
一个副本正在连接到其源。Create DB
正在执行一个创建数据库操作Daemon
该线程是服务器内部的线程,而不是为客户端连接提供服务的线程Debug
线程正在生成调试信息Delayed insert
该线程是一个延迟写入处理程序Drop DB
该线程正在执行删除数据库操作Error
错误Execute
线程正在执行 prepared statementFetch
线程正在获取 prepared statement 的结果Field List
线程正在检索表列的信息Init DB
该线程正在选择默认数据库Kill
正在杀死另外一个线程Long Data
线程正在检索执行准备语句的结果中的长数据Ping
该线程正在处理服务器 ping 请求Prepare
Processlist
Query
Employed for user clients while executing queries by single-threaded replication applier threads, as well as by the replication coordinator thread.Quit
The thread is terminating.Refresh
The thread is flushing table, logs, or caches, or resetting status variable or replication server informationRegister Slave
The thread is registering a replica serverReset stmt
The thread is resetting a prepared statement.Set option
The thread is setting or resetting a client statement execution option.Shutdown
The thread is shutting down the server.Sleep
The thread is waiting for the client to send a new statement to it.Statistics
The thread is producing server status information.Time
(目前未使用该状态)
- STATE字段状态说明
Sleep
:连接处于空闲状态,没有正在执行的命令。Query
:连接正在执行一个查询。Locked
:连接正在等待锁定资源。Copying to tmp table
:连接正在将结果复制到临时表中。Sending data
:连接正在发送查询结果给客户端。Sorting result
:连接正在对结果进行排序。Waiting for table flush
:连接正在等待表的刷新。Repair by sorting
:连接正在执行表的修复操作。Creating sort index
:连接正在创建排序索引。
COMMAND字段说明参考:https://dev.mysql.com/doc/refman/8.0/en/thread-commands.html
STATE 字段说明参考:https://dev.mysql.com/doc/refman/8.0/en/general-thread-states.html