使用性能模式监视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 。
注意
InnoDBALTER 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。
