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  /  ...  /  Monitoring ALTER TABLE Progress for InnoDB Tables Using Performance Schema

17.16.1 InnoDB 表 ALTER TABLE 进度监控使用 MySQL 性能_schema

您可以使用Performance Schema来监控ALTER TABLE进度对InnoDB表。

有七个阶段事件,代表ALTER TABLE的不同阶段。每个阶段事件报告了ALTER TABLE总体操作的运行总数WORK_ COMPLETEDWORK_ESTIMATED,在ALTER TABLE通过其不同阶段时。WORK_ESTIMATED使用公式计算,考虑了ALTER TABLE执行的所有工作,并可能在ALTER TABLE处理时进行修正。WORK_COMPLETEDWORK_ESTIMATED值是ALTER TABLE执行的所有工作的抽象表示。

事件顺序如下:

  • stage/innodb/alter table (读取主键和内部排序): 在ALTER TABLE执行读取主键阶段时,该阶段是活动的。它从WORK_ COMPLETED=0WORK_ESTIMATED开始,设置为估算的主键页面数。当该阶段完成时,WORK_ESTIMATED将被更新为实际的主键页面数。

  • stage/innodb/alter table (merge 排序): 对于ALTER TABLE操作添加的每个索引,该阶段将被重复执行。

  • stage/innodb/alter table (插入): 对于ALTER TABLE操作添加的每个索引,该阶段将被重复执行。

  • stage/innodb/alter table (日志应用索引): 这个阶段包括在ALTER TABLE运行时生成的 DML 日志的应用。

  • stage/innodb/alter table (刷新): 在该阶段开始之前,WORK_ESTIMATED将被更新为更准确的估算值,基于刷新列表的长度。

  • stage/innodb/alter table (log apply table): 这个阶段包括在ALTER TABLE运行时生成的并发DML日志的应用。这个阶段的持续时间取决于表的变化程度。如果没有在表上执行并发DML,这个阶段将是瞬间的。

  • stage/innodb/alter table (end): 包含在刷新阶段后出现的任何剩余工作,例如在ALTER TABLE运行时对表执行的DML重新应用。

Note

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

以下示例演示了如何启用stage/innodb/alter table%阶段事件仪器和相关消费者表来监控ALTER TABLE进度。关于性能_schema_阶段事件仪器和相关消费者的信息,请见第29.12.5节,“性能_schema_阶段事件表”

  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操作。在这个示例中,将在employees sample数据库中的employees表中添加一个middle_name列。

    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. 通过查询性能chema的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)

    events_ stages_current 表如果 ALTER TABLE 操作已经完成,则返回空集。在这种情况下,您可以查看 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。