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 statement
  • Fetch 线程正在获取 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 information
  • Register Slave The thread is registering a replica server
  • Reset 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

5. 参考文档

posted @ 2023-11-27 17:49  开发者404  阅读(507)  评论(0编辑  收藏  举报