文档首页
MySQL 8.4 参考手册
相关文档 下载此手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  性能模式阶段事件表

29.12.5 性能模式阶段事件表

性能模式检测阶段,即语句执行过程中的步骤,例如解析语句、打开表或执行 filesort 操作。阶段对应于 SHOW PROCESSLIST 显示的线程状态或信息模式 PROCESSLIST 表中可见的状态。当状态值发生变化时,阶段开始和结束。

在事件层次结构中,等待事件嵌套在阶段事件中,阶段事件嵌套在语句事件中,语句事件嵌套在事务事件中。

这些表存储阶段事件

以下部分描述阶段事件表。还有一些汇总表,它们汇总有关阶段事件的信息;请参见 第 29.12.20.2 节,“阶段摘要表”

有关三个阶段事件表之间关系的更多信息,请参见 第 29.9 节,“性能模式用于当前和历史事件的表”

配置阶段事件收集

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

  • 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 节,“性能模式启动配置”第 29.4 节,“性能模式运行时配置”

阶段事件进度信息

性能模式阶段事件表包含两个列,它们一起为每行提供一个阶段进度指示器

  • WORK_COMPLETED:为阶段完成的工作单元数

  • WORK_ESTIMATED: 阶段预计的工作量单位数

如果仪器没有提供进度信息,则每列都为 NULL。如果信息可用,则信息的解释完全取决于仪器实现。Performance Schema 表提供了一个容器来存储进度数据,但对度量本身的语义不作任何假设。

  • 一个 工作量单位 是一个在执行期间随时间推移而增加的整数度量,例如处理的字节数、行数、文件数或表数。特定仪器的 工作量单位 定义留给提供数据的仪器代码。

  • WORK_COMPLETED 值可以一次增加一个或多个单位,具体取决于被测代码。

  • WORK_ESTIMATED 值可以在阶段过程中发生变化,具体取决于被测代码。

阶段事件进度指示器的仪器可以实现以下任何行为

  • 无进度仪器

    这是最常见的情况,没有提供进度数据。 WORK_COMPLETEDWORK_ESTIMATED 列都为 NULL

  • 无界进度仪器

    只有 WORK_COMPLETED 列有意义。没有为 WORK_ESTIMATED 列提供数据,显示为 0。

    通过查询 events_stages_current 表以获取受监控会话,监控应用程序可以报告到目前为止执行了多少工作,但不能报告阶段是否接近完成。目前,没有阶段像这样被测。

  • 有界进度仪器

    WORK_COMPLETEDWORK_ESTIMATED 列都有意义。

    这种类型的进度指示器适用于具有明确完成条件的操作,例如稍后描述的表复制仪器。通过查询 events_stages_current 表以获取受监控会话,监控应用程序可以报告到目前为止执行了多少工作,并且可以通过计算 WORK_COMPLETED / WORK_ESTIMATED 比率来报告阶段的总完成百分比。

stage/sql/copy to tmp table 仪器说明了进度指示器的工作原理。在执行 ALTER TABLE 语句时,将使用 stage/sql/copy to tmp table 阶段,并且此阶段可能会执行很长时间,具体取决于要复制的数据量。

表复制任务具有明确的终止条件(所有行都已复制),并且 stage/sql/copy to tmp table 阶段被测以提供有界进度信息:使用的工作量单位是复制的行数,WORK_COMPLETEDWORK_ESTIMATED 都具有意义,它们的比率指示任务完成的百分比。

要启用仪器和相关使用者,请执行以下语句

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 表中选择。