使用性能模式监视InnoDB表的ALTER TABLE进度
您可以使用Performance Schema监视表的ALTER TABLE
进度。InnoDB
有七个阶段的事件代表的不同阶段ALTER TABLE
。每个阶段事件在其不同阶段进行时,报告的运行总计WORK_COMPLETED
以及WORK_ESTIMATED
整个ALTER TABLE
操作的运行情况。WORK_ESTIMATED
使用考虑所有已完成工作的公式来计算ALTER TABLE
,并且可以在ALTER TABLE
处理过程中进行修改。WORK_COMPLETED
和WORK_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
,将根据刷新列表的长度以更准确的估算值进行更新。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
进度。有关性能架构阶段事件工具和相关使用者的信息,请参见“性能架构阶段事件表”。
启用
stage/innodb/alter%
工具:mysql>
UPDATE performance_schema.setup_instrumentsSET ENABLED = 'YES'WHERE NAME LIKE 'stage/innodb/alter%'; Query OK, 7 rows affected (0.00 sec) Rows matched: 7 Changed: 7 Warnings: 0启用舞台活动消费表,其中包括
events_stages_current
,events_stages_history
,和events_stages_history_long
。mysql>
UPDATE performance_schema.setup_consumersSET 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示例数据库的employees表中。mysql>
ALTER TABLE employees.employeesADD COLUMN middle_name varchar(14)AFTER first_name; Query OK, 0 rows affected (9.27 sec) Records: 0 Duplicates: 0 Warnings: 0ALTER TABLE
通过查询性能架构events_stages_current
表来检查操作的进度。显示的阶段事件根据ALTER TABLE
当前正在进行的阶段而有所不同。该WORK_COMPLETED
列显示已完成的工作。该WORK_ESTIMATED
列提供了剩余工作的估计。mysql>
SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATEDFROM 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_ESTIMATEDFROM 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。