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

来自泡泡学习笔记
跳到导航 跳到搜索

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

有七个阶段事件代表 ALTER TABLE 的不同阶段。每个阶段事件都会报告整个 ALTER TABLE 操作在其不同阶段的进行过程中的 WORK_COMPLETED 和 WORK_ESTIMATED 的运行总计。WORK_ESTIMATED 是使用考虑到 ALTER TABLE 执行的所有工作的公式计算得出的,并且在 ALTER TABLE 处理过程中可能会被修订。WORK_COMPLETED 和 WORK_ESTIMATED 值是 ALTER TABLE 执行的所有工作的抽象表示。

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

以下示例演示如何启用 stage/innodb/alter table% 阶段事件工具和相关的使用者表来监控 ALTER TABLE 进度。

1. 启用 stage/innodb/alter% 工具:

mysql> UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES'
WHERE NAME LIKE 'tage/innodb/alter%';
查询成功,影响了 7 行(0.00 秒)
匹配的行数:7 更改的行数:7 警告:0


2. 启用阶段事件使用者表,包括 events_stages_current、events_stages_history 和 events_stages_history_long。

mysql> UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME LIKE '%stages%';
查询成功,影响了 3 行(0.00 秒)
匹配的行数:3 更改的行数:3 警告:0


3. 运行 ALTER TABLE 操作。在此示例中,向 employees 示例数据库的 employees 表中添加 middle_name 列。

mysql> ALTER TABLE employees.employees ADD COLUMN middle_name varchar(14) AFTER first_name;
查询成功,0 行受影响(9.27 秒)
记录:0 重复:0 警告:0


4. 通过查询性能模式的 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 行在集合中(0.01 秒)


5. 如果 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 行在集合中(0.00 秒)

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