• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 使用性能模式监视InnoDB表的ALTER TABLE进度

    您可以使用Performance Schema监视表的ALTER TABLE进度。InnoDB

    有七个阶段的事件代表的不同阶段ALTER TABLE。每个阶段事件在其不同阶段进行时,报告的运行总计WORK_COMPLETED以及WORK_ESTIMATED整个ALTER TABLE操作的运行情况。WORK_ESTIMATED使用考虑所有已完成工作的公式来计算ALTER TABLE,并且可以在ALTER TABLE处理过程中进行修改。WORK_COMPLETEDWORK_ESTIMATED值是。的所有工作的抽象表示ALTER TABLE

    按照发生的顺序,ALTER TABLE阶段事件包括:

    • stage/innodb/alter table(read PK and internal sort):处于ALTER TABLE读取主键阶段时,此阶段处于活动状态。它以主键开头WORK_COMPLETED=0WORK_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进度。有关性能架构阶段事件工具和相关使用者的信息,请参见“性能架构阶段事件表”。

    1. 启用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
      
    2. 启用舞台活动消费表,其中包括events_stages_currentevents_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
      
    3. 运行一个ALTER TABLE操作。在此示例中,一middle_name列被添加到employee示例数据库的employees表中。

      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
      
    4. ALTER TABLE通过查询性能架构events_stages_current表来检查操作的进度。显示的阶段事件根据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)
      

      events_stages_current如果ALTER TABLE操作完成,该表将返回一个空集。在这种情况下,您可以检查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 rows in set (0.00 sec)
      

      如上所示,WORK_ESTIMATEDALTER TABLE处理过程中修改了该值。初始阶段完成后的估计工时为1213。ALTER TABLE处理完成后,将WORK_ESTIMATED其设置为实际值1981。