14.17.1 使用性能模式监视 InnoDBtable 的 ALTER TABLE 进度
您可以使用Performance Schema监视InnoDB
个 table 的ALTER TABLE进度。
有七个阶段事件代 tableALTER TABLE的不同阶段。每个阶段事件在其不同阶段进行时,报告的总体_操作的运行总计WORK_COMPLETED
和WORK_ESTIMATED
。 WORK_ESTIMATED
是使用考虑到ALTER TABLE执行的所有工作的公式计算得出的,并且可以在ALTER TABLE处理期间进行修改。 WORK_COMPLETED
和WORK_ESTIMATED
值是ALTER TABLE执行的所有工作的抽象 table 示。
按照发生的 Sequences,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)
:在此阶段开始之前,将根据刷新列 table 的长度以更准确的估算值更新WORK_ESTIMATED
。 -
stage/innodb/alter table (log apply table)
:此阶段包括应用程序运行ALTER TABLE时生成的并发 DML 日志。此阶段的持续时间取决于 table 更改的程度。如果未在 table 上运行任何并发 DML,则此阶段是即时的。 -
stage/innodb/alter table (end)
:包括刷新阶段之后出现的所有剩余工作,例如重新应用在ALTER TABLE运行时在 table 上执行的 DML。
Note
InnoDB
ALTER TABLE舞台事件当前不考虑空间索引的增加。
ALTER TABLE 使用性能模式的监视示例
以下示例演示了如何启用stage/innodb/alter table%
阶段事件工具和相关的使用者 table 来监视ALTER TABLE进度。有关 Performance Schema 阶段事件工具和相关使用者的信息,请参见第 25.12.5 节“性能架构阶段事件 table”。
- 启用
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
- 启用阶段事件使用者 table,其中包括events_stages_current,events_stages_history和events_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
- 运行ALTER TABLE操作。在此示例中,将
middle_name
列添加到 employee 示例数据库的 employeetable 中。
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
- 通过查询“性能模式events_stages_current”table 来检查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_currenttable 返回一个空集。在这种情况下,您可以检查events_stages_historytable 以查看事件数据以了解已完成的操作。例如:
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)
如上所示,在ALTER TABLE
处理期间修改了WORK_ESTIMATED
值。初始阶段完成之后的估计功为 1213.ALTER TABLE
处理完成后,将WORK_ESTIMATED
设置为实际值 1981.