Documentation Home
MySQL 8.0 参考手册  / 第 27 章 MySQL 性能模式  / 27.12 性能模式表描述  /  25.12.5 性能模式阶段事件表

25.12.5 性能模式阶段事件表

Performance Schema 仪器阶段,它们是语句执行过程中的步骤,例如解析语句、打开表或执行 filesort操作。阶段对应于表中显示的SHOW PROCESSLIST或可见 的线程状态INFORMATION_SCHEMA.PROCESSLIST 。当状态值改变时,阶段开始和结束。

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

这些表存储阶段事件:

以下部分描述阶段事件表。也有汇集阶段事件信息的汇总表;参见 第 25.12.15.2 节,“阶段汇总表”

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

配置阶段事件收集

控制是否采集stage事件,设置相关instruments和consumer的状态:

  • setup_instruments表包含名称以 开头的工具 stage。使用这些工具来启用或禁用各个阶段事件类的收集。

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

除了那些提供语句进度信息的工具外,阶段工具默认是禁用的。例如:

mysql> SELECT *
       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/checking privileges on cached query      | NO      | NO    |
| stage/sql/checking query cache for query           | 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 *
       FROM performance_schema.setup_instruments
       WHERE ENABLED='YES' AND NAME LIKE "stage/%";
+------------------------------------------------------+---------+-------+
| NAME                                                 | ENABLED | TIMED |
+------------------------------------------------------+---------+-------+
| stage/sql/copy to tmp table                          | 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   |
+------------------------------------------------------+---------+-------+

默认情况下禁用阶段消费者:

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%';

要仅收集特定的舞台事件,请仅启用相应的舞台乐器。要仅为特定阶段事件表收集阶段事件,请启用阶段工具,但仅启用与所需表对应的阶段消费者。

setup_timers表包含一个NAME值为 的 行,该行stage指示阶段事件计时的单位。默认单位是NANOSECOND

mysql> SELECT *
       FROM performance_schema.setup_timers
       WHERE NAME = 'stage';
+-------+------------+
| NAME  | TIMER_NAME |
+-------+------------+
| stage | NANOSECOND |
+-------+------------+

要更改计时单位,请修改 TIMER_NAME值:

UPDATE performance_schema.setup_timers
SET TIMER_NAME = 'MICROSECOND'
WHERE NAME = 'stage';

有关配置事件收集的其他信息,请参阅第 25.3 节,“性能模式启动配置”第 25.4 节,“性能模式运行时配置”

舞台活动进度信息

Performance Schema 阶段事件表包含两列,它们一起为每一行提供阶段进度指示器:

  • 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_COMPLETED并且 WORK_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表中选择。