MySQL8.x 中 performance_schema 下 processlist表的说明

发布时间 2023-11-27 17:52:33作者: 开发者404

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
  • Fetch
  • Field List
  • Init DB
  • Kill
  • Long Data
  • Ping
  • Prepare
  • Processlist
  • Query
  • Quit
  • Refresh
  • Register Slave
  • Reset stmt
  • Set option
  • Shutdown
  • Sleep
  • Statistics
  • Time

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. 参考文档