你可以监控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
舞台活动包括:
(1)修改表:
:该阶段活跃时ALTER TABLE
处于读取主键阶段。它开始于WORK_COMPLETED = 0
而且WORK_ESTIMATED
设置为主键中的估计页面数。当这个阶段完成时,WORK_ESTIMATED
更新为主键中的实际页数。对表进行归并排序
对象添加的每个索引都会重复此阶段ALTER TABLE
操作。(2)插入innodb表
对象添加的每个索引都会重复此阶段ALTER TABLE
操作。修改innodb表的索引
:该阶段包括应用生成的DML日志ALTER TABLE
是运行。刷新/innodb/alter表
:在这个阶段开始之前,WORK_ESTIMATED
根据齐平列表的长度,使用更准确的估算值进行更新。修改表(log apply table)
:此阶段包括应用并发生成的DML日志ALTER TABLE
是运行。这个阶段的持续时间取决于表更改的程度。如果表上没有运行并发DML,则此阶段是即时的。运行/innodb/alter表
:包括清除阶段之后出现的任何剩余工作,例如重新应用在表上执行的DMLALTER TABLE
是运行。
InnoDB
ALTER TABLE
阶段事件目前不考虑空间索引的添加。
使用性能模式的ALTER TABLE监视示例
下面的示例演示如何启用阶段/ innodb / alter table %
准备要监视的事件工具和相关消费者表ALTER TABLE
的进步。有关性能模式阶段事件工具和相关使用者的信息,请参见第25.12.5节“性能方案阶段事件表”.
启用
阶段/ innodb /改变%
仪器:mysql>更新performance_schema。setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/alter%';查询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>更新performance_schema。setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%';查询OK, 3 rows affected (0.00 sec) rows matched: 3 Changed: 3 Warnings: 0
运行一个
ALTER TABLE
操作。在这个例子中,amiddle_name
列被添加到雇员示例数据库的雇员表中。修改表员工表。(14)列名称:查询OK, 0 rows affected (9.27 sec) Records: 0 duplicate: 0 warning: 0
检查进度
ALTER TABLE
操作events_stages_current
表格所显示的舞台事件因其不同而不同ALTER TABLE
目前正在进行中。的WORK_COMPLETED
列显示已完成的工作。的WORK_ESTIMATED
列提供对剩余工作的估计。SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_current;+------------------------------------------------------+----------------+----------------+ | EVENT_NAME | WORK_COMPLETED | WORK_ESTIMATED | +------------------------------------------------------+----------------+----------------+ | 阶段/ innodb / alter table(读PK和内部类)| 280 | 1245 | +------------------------------------------------------+----------------+----------------+ 1行集(0.01秒)
的
events_stages_current
表返回一个空集ALTER TABLE
操作完成。在这种情况下,您可以检查events_stages_history
表以查看已完成操作的事件数据。例如:SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_history;+------------------------------------------------------+----------------+----------------+ | EVENT_NAME | WORK_COMPLETED | WORK_ESTIMATED | +------------------------------------------------------+----------------+----------------+ | 阶段/ innodb / alter table(读PK和内部类)| 886 | 1213 | |阶段/ innodb / alter table(冲洗)| 1213 | 1213 | |阶段/ innodb / alter table(日志应用表)| 1597 | 1597 | |阶段/ innodb / alter table(结束)| 1597 | 1597 | | / innodb / alter table(日志应用阶段表)| 1981 | 1981 | +------------------------------------------------------+----------------+----------------+ 5行集(0.00秒)
如上所示,
WORK_ESTIMATED
值在ALTER TABLE
处理。初期完成后预计工作量为1213。当ALTER TABLE
处理完成后,WORK_ESTIMATED
被设置为实际值,即1981年。