文档首页
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 参考手册  /  ...  /  使用性能模式监控 InnoDB 表的 ALTER TABLE 进度

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

您可以使用 性能模式 监控 ALTER TABLEInnoDB 表的进度。

有七个阶段事件代表 ALTER TABLE 的不同阶段。每个阶段事件报告 ALTER TABLE 操作在执行过程中各个阶段的 WORK_COMPLETEDWORK_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=0WORK_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 会根据刷新列表的长度更新为更准确的估计值。

  • stage/innodb/alter table (log apply table):此阶段包括应用在 ALTER TABLE 运行期间生成的并发 DML 日志。此阶段的持续时间取决于表更改的程度。如果在表上没有运行并发 DML,则此阶段是即时的。

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

注意

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

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

以下示例演示了如何启用 stage/innodb/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。