Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Performance Schema Stage Event Tables

29.12.5 性能模式阶段事件表

性能模式的阶段事件表用于跟踪语句执行过程中的步骤,例如解析一个语句、打开一个表或执行 filesort 操作。阶段对应于由 SHOW PROCESSLIST 显示的线程状态或在信息模式的 PROCESSLIST 表中可见的线程状态。阶段开始和结束与状态值变化相关。

在事件层次结构中,等待事件嵌套在阶段事件中,后者又嵌套在语句事件中,最后是事务事件。

这些表格存储了阶段事件:

以下各节描述了阶段事件表。除了这些表格之外,还有汇总表,它们聚合了关于阶段事件的信息;请参阅 第 29.12.20.2 节,“Stage Summary 表”

有关三种阶段事件表之间关系的更多信息,请参阅 Section 29.9, “Performance Schema 表格用于当前和历史事件”

要控制是否收集阶段事件,请设置相关的仪器和消费者状态:

  • setup_instruments 包含以 stage 开头命名的仪器。使用这些仪器来启用或禁用单个阶段事件类别的收集。

  • setup_consumers 包含与当前和历史阶段事件表名称相对应的消费者值。使用这些消费者来过滤阶段事件的收集。

除了提供语句进度信息的那些仪器,其他阶段仪器默认禁用。例如:

mysql> SELECT NAME, ENABLED, TIMED
       FROM performance_schema.setup_instruments
       WHERE NAME RLIKE 'stage/sql/[a-c]';
+----------------------------------------------------+---------+-------+
| NAME                                               | ENABLED | TIMED |
+----------------------------------------------------+---------+-------+
| stage/sql/After create                             | NO      | NO    |
| stage/sql/allocating local table                   | NO      | NO    |
| stage/sql/altering table                           | NO      | NO    |
| stage/sql/committing alter table to storage engine | NO      | NO    |
| stage/sql/Changing master                          | NO      | NO    |
| stage/sql/Checking master version                  | NO      | NO    |
| stage/sql/checking permissions                     | NO      | NO    |
| stage/sql/cleaning up                              | NO      | NO    |
| stage/sql/closing tables                           | NO      | NO    |
| stage/sql/Connecting to master                     | NO      | NO    |
| stage/sql/converting HEAP to MyISAM                | NO      | NO    |
| stage/sql/Copying to group table                   | NO      | NO    |
| stage/sql/Copying to tmp table                     | NO      | NO    |
| stage/sql/copy to tmp table                        | NO      | NO    |
| stage/sql/Creating sort index                      | NO      | NO    |
| stage/sql/creating table                           | NO      | NO    |
| stage/sql/Creating tmp table                       | NO      | NO    |
+----------------------------------------------------+---------+-------+

提供语句进度信息的阶段仪器默认启用并计时:

mysql> SELECT NAME, ENABLED, TIMED
       FROM performance_schema.setup_instruments
       WHERE ENABLED='YES' AND NAME LIKE "stage/%";
+------------------------------------------------------+---------+-------+
| NAME                                                 | ENABLED | TIMED |
+------------------------------------------------------+---------+-------+
| stage/sql/copy to tmp table                          | YES     | YES   |
| stage/sql/Applying batch of row changes (write)      | YES     | YES   |
| stage/sql/Applying batch of row changes (update)     | YES     | YES   |
| stage/sql/Applying batch of row changes (delete)     | YES     | YES   |
| stage/innodb/alter table (end)                       | YES     | YES   |
| stage/innodb/alter table (flush)                     | YES     | YES   |
| stage/innodb/alter table (insert)                    | YES     | YES   |
| stage/innodb/alter table (log apply index)           | YES     | YES   |
| stage/innodb/alter table (log apply table)           | YES     | YES   |
| stage/innodb/alter table (merge sort)                | YES     | YES   |
| stage/innodb/alter table (read PK and internal sort) | YES     | YES   |
| stage/innodb/buffer pool load                        | YES     | YES   |
| stage/innodb/clone (file copy)                       | YES     | YES   |
| stage/innodb/clone (redo copy)                       | YES     | YES   |
| stage/innodb/clone (page copy)                       | YES     | YES   |
+------------------------------------------------------+---------+-------+

阶段消费者默认禁用:

mysql> SELECT *
       FROM performance_schema.setup_consumers
       WHERE NAME LIKE 'events_stages%';
+----------------------------+---------+
| NAME                       | ENABLED |
+----------------------------+---------+
| events_stages_current      | NO      |
| events_stages_history      | NO      |
| events_stages_history_long | NO      |
+----------------------------+---------+

要在服务器启动时控制阶段事件收集,请在您的 my. cnf 文件中使用以下行:

  • 启用:

    [mysqld]
    performance-schema-instrument='stage/%=ON'
    performance-schema-consumer-events-stages-current=ON
    performance-schema-consumer-events-stages-history=ON
    performance-schema-consumer-events-stages-history-long=ON
  • 禁用:

    [mysqld]
    performance-schema-instrument='stage/%=OFF'
    performance-schema-consumer-events-stages-current=OFF
    performance-schema-consumer-events-stages-history=OFF
    performance-schema-consumer-events-stages-history-long=OFF

要在运行时控制阶段事件收集,请更新表 setup_instrumentssetup_consumers

  • 启用:

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'YES', TIMED = 'YES'
    WHERE NAME LIKE 'stage/%';
    
    UPDATE performance_schema.setup_consumers
    SET ENABLED = 'YES'
    WHERE NAME LIKE 'events_stages%';
  • 禁用:

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'NO', TIMED = 'NO'
    WHERE NAME LIKE 'stage/%';
    
    UPDATE performance_schema.setup_consumers
    SET ENABLED = 'NO'
    WHERE NAME LIKE 'events_stages%';

要收集特定阶段事件,只启用相应的阶段器具。要只收集特定阶段事件表的阶段事件,只启用阶段器具,但只启用与所需表对应的阶段消费者。

有关配置事件收集的更多信息,请参阅第29.3节,“性能_schema启动配置”,以及第29.4节,“性能_schema运行时配置”

性能_schema阶段事件表包含两个列,这两个列一起提供了每行的阶段进度指示器:

  • WORK_完成:阶段中已完成的工作单元数

  • WORK_估计:阶段预期完成的工作单元数

每个列在没有提供进度信息时均为NULL。如果有可用,进度信息的解释完全取决于器具实现。性能_schema表提供了一个存储进度数据的容器,但对指标本身的语义不做任何假设:

  • 一个“工作单元”是一个整数指标,在执行过程中随时间增加,例如处理的字节、行、文件或表的数量。特定器具提供数据定义了“工作单元”的含义。

  • WORK_完成值可以一次性增加一个或多个单位,取决于被编程的代码。

  • WORK_估计值在阶段执行过程中可能会改变,取决于被编程的代码。

对阶段事件进度指示器进行编程可以实现以下任何一种行为:

  • 没有进度编程

    这是最常见的情况,没有提供进度数据。WORK_完成WORK_估计列均为NULL

  • 无界进度编程

    只有WORK_完成列是有意义的。对WORK_估计列没有提供数据,它显示为0。

    通过查询events_stages_current表来监控会话,可以报告已执行的工作量,但无法报告阶段即将完成。目前,没有任何阶段被编程以此方式。

  • 有界进度编程

    WORK_完成WORK_估计列都是有意义的。

    这种类型的进度指示器适用于具有定义完成标准的操作,如后面描述的表复制器。通过查询events_stages_current表来监控会话,可以报告已执行的工作量,并且可以报告阶段完成百分比,通过计算WORK_完成WORK_估计的比例。

stage/sql/copy to tmp table器具说明了进度指示器是如何工作的。在执行ALTER TABLE语句时,stage/sql/copy to tmp table阶段被使用,这个阶段可能会执行很长时间,取决于要复制的数据大小。

任务有一个定义的终止条件(所有行都已复制),并且stage/sql/copy to tmp table阶段被编程以提供有界进度信息:工作单元是复制的行数,WORK_完成WORK_估计均为有意义,其比例表示任务百分比完成。

要启用器具及其相关消费者,请执行以下语句:

UPDATE performance_schema.setup_instruments
SET ENABLED='YES'
WHERE NAME='stage/sql/copy to tmp table';

UPDATE performance_schema.setup_consumers
SET ENABLED='YES'
WHERE NAME LIKE 'events_stages_%';

要查看正在进行的ALTER TABLE语句的进度,查询events_stages_current表。