Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Monitoring ALTER TABLE Progress for InnoDB Tables Using Performance Schema

17.16.1 使用性能模式监控InnoDB表的ALTER TABLE进度

您可以使用ALTER TABLE进度监控InnoDB表使用性能模式

有七个阶段事件,代表ALTER TABLE的不同阶段。每个阶段事件报告ALTER TABLE操作的总体WORK_COMPLETED和WORK_ESTIMATED。WORK_ESTIMATED是根据ALTER TABLE执行的所有工作计算的,可能会在ALTER TABLE处理过程中被修订。WORK_COMPLETEDWORK_ESTIMATED值是ALTER TABLE执行的所有工作的抽象表示。

按照发生顺序,ALTER TABLE阶段事件包括:

  • stage/innodb/alter table (read PK and internal sort):该阶段在ALTER TABLE读取主键并执行内部排序时活动。它从WORK_COMPLETED=0开始,并将WORK_ESTIMATED设置为主键中的页面数。当阶段完成时,WORK_ESTIMATED将被更新为主键中的实际页面数。

  • stage/innodb/alter table (merge sort):该阶段将重复执行,以便添加ALTER TABLE操作。

  • stage/innodb/alter table (insert):该阶段将重复执行,以便添加ALTER TABLE操作。

  • stage/innodb/alter table (log apply index):该阶段包括应用ALTER TABLE操作期间生成的DML日志。

  • stage/innodb/alter table (flush):在该阶段开始之前,WORK_ESTIMATED将被更新,以反映flush列表的长度。

  • stage/innodb/alter table (log apply table):该阶段包括应用ALTER TABLE操作期间生成的并发DML日志。该阶段的持续时间取决于表的变化程度。如果没有并发DML,则该阶段将是即时的。

  • stage/innodb/alter table (end):包括ALTER TABLE操作的所有剩余工作,例如重新应用ALTER TABLE操作期间执行的DML。

Note

InnoDB ALTER TABLE阶段事件当前不包括空间索引的添加。

使用性能模式监控ALTER TABLE示例

以下示例演示如何启用ALTER TABLE阶段事件仪表和相关消费者表,以监控ALTER TABLE进度。有关性能模式阶段事件仪表和相关消费者的信息,请参阅第29.12.5节,“性能模式阶段事件表”

  1. 启用stage/innodb/alter%仪表:

    mysql> UPDATE performance_schema.setup_instruments
           SET ENABLED = 'YES'
           WHERE NAME LIKE 'stage/innodb/alter%';
    Query OK, 7 rows affected (0.00 sec)
    Rows matched: 7  Changed: 7  Warnings: 0
  2. 启用阶段事件消费者表,包括 events_stages_currentevents_stages_historyevents_stages_history_long

    mysql> UPDATE performance_schema.setup_consumers
           SET ENABLED = 'YES'
           WHERE NAME LIKE '%stages%';
    Query OK, 3 rows affected (0.00 sec)
    Rows matched: 3  Changed: 3  Warnings: 0
  3. 运行 ALTER TABLE 操作。在这个示例中,添加了一个 middle_name 列到 employees 数据库的 employees 表中。

    mysql> ALTER TABLE employees.employees ADD COLUMN middle_name varchar(14) AFTER first_name;
    Query OK, 0 rows affected (9.27 sec)
    Records: 0  Duplicates: 0  Warnings: 0
  4. 通过查询 Performance Schema events_stages_current 表来检查 ALTER TABLE 操作的进度。当前阶段事件显示取决于当前 ALTER TABLE 阶段的进度。WORK_COMPLETED 列显示已完成的工作。WORK_ESTIMATED 列提供了剩余工作的估算。

    mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
           FROM performance_schema.events_stages_current;
    +------------------------------------------------------+----------------+----------------+
    | EVENT_NAME                                           | WORK_COMPLETED | WORK_ESTIMATED |
    +------------------------------------------------------+----------------+----------------+
    | stage/innodb/alter table (read PK and internal sort) |            280 |           1245 |
    +------------------------------------------------------+----------------+----------------+
    1 row in set (0.01 sec)

    如果 ALTER TABLE 操作已经完成,则 events_stages_current 表将返回一个空集。在这种情况下,可以检查 events_stages_history 表以查看已完成操作的事件数据。例如:

    mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
           FROM performance_schema.events_stages_history;
    +------------------------------------------------------+----------------+----------------+
    | EVENT_NAME                                           | WORK_COMPLETED | WORK_ESTIMATED |
    +------------------------------------------------------+----------------+----------------+
    | stage/innodb/alter table (read PK and internal sort) |            886 |           1213 |
    | stage/innodb/alter table (flush)                     |           1213 |           1213 |
    | stage/innodb/alter table (log apply table)           |           1597 |           1597 |
    | stage/innodb/alter table (end)                       |           1597 |           1597 |
    | stage/innodb/alter table (log apply table)           |           1981 |           1981 |
    +------------------------------------------------------+----------------+----------------+
    5 rows in set (0.00 sec)

    如上所示,WORK_ESTIMATED 值在 ALTER TABLE 处理过程中被修订。初始阶段的估算工作量为 1213。当 ALTER TABLE 处理完成时,WORK_ESTIMATED 被设置为实际值,即 1981。