25.12.5 性能架构阶段事件 table

Performance Schema 记录了阶段,这是语句执行过程中的步骤,例如,解析语句,打开 table 或执行filesort操作。阶段对应于SHOW PROCESSLIST显示或在INFORMATION_SCHEMA.PROCESSLISTtable 中可见的线程状态。状态值更改时,阶段开始和结束。

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

这些 table 存储阶段事件:

以下各节描述了阶段事件 table。也有汇总 table,汇总有关舞台事件的信息。参见第 25.12.15.2 节“阶段摘要 table”

有关三个阶段事件 table 之间的关系的更多信息,请参见第 25.9 节“当前和历史事件的性能架构 table”

配置舞台事件收集

要控制是否收集舞台事件,请设置相关工具和使用者的状态:

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

  • setup_consumerstable 包含具有与当前和历史舞台事件 table 名称相对应的名称的使用者值。使用这些使用者筛选阶段事件的集合。

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

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文件中使用以下行:

  • Enable:
[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
  • Disable:
[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_consumerstable:

  • Enable:
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME = 'stage/%';

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

UPDATE performance_schema.setup_consumers
SET ENABLED = 'NO'
WHERE NAME LIKE 'events_stages%';

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

setup_timerstable 包含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 阶段事件 table 包含两列,这两列加在一起为每一行提供阶段进度指示器:

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

  • WORK_ESTIMATED:该阶段预期的工作单元数

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

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

  • WORK_COMPLETED值可以一次增加一个或多个单位,具体取决于所插入的代码。

  • WORK_ESTIMATED值可以在此阶段更改,具体取决于所插入的代码。

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

  • 没有进度检测

这是最典型的情况,其中没有提供进度数据。 WORK_COMPLETEDWORK_ESTIMATED列均为NULL

  • 无限进度检测

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

通过在events_stages_currenttable 中查询受监视的会话,监视应用程序可以报告到目前为止已执行了多少工作,但无法报告该阶段是否接近完成。当前,没有阶段会像这样被检测。

  • 有限进度仪器

WORK_COMPLETEDWORK_ESTIMATED列均有意义。

这种进度指示器适用于具有定义的完成标准的操作,例如稍后描述的 table 格复制工具。通过查询events_stages_currenttable 中的受监视会话,监视应用程序可以报告到目前为止已执行了多少工作,并可以通过计算WORK_COMPLETED/WORK_ESTIMATED比率来报告该阶段的总体完成百分比。

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

table-copy 任务具有已定义的终止(已复制的所有行),并且stage/sql/copy to tmp table阶段已检测到可提供有限的进度信息:使用的工作单位是已复制的行数,WORK_COMPLETEDWORK_ESTIMATED均有意义,并且它们的比率 table 示任务百分比完成。

要启用工具和相关使用者,请执行以下语句:

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