Spec-Zone.ru › MySQL 5.7

14.17.1 Мониторинг прогресса ALTER TABLE для таблиц InnoDB с помощью Performance Schema

Вы можете отслеживать прогресс оператора ALTER TABLE для таблиц InnoDB с помощью Performance Schema.

Существует семь событий стадии, которые представляют различные фазы выполнения оператора 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): Эта стадия включает применение журнала DML, сгенерированного во время выполнения оператора ALTER TABLE.

  • stage/innodb/alter table (flush): Перед началом этой стадии, WORK_ESTIMATED обновляется с более точной оценкой, основанной на длине списка сброса.

  • stage/innodb/alter table (log apply table): Эта стадия включает применение журнала одновременного DML, сгенерированного во время выполнения оператора ALTER TABLE. Продолжительность этой фазы зависит от степени изменений в таблице. Эта фаза мгновенна, если на таблицу не выполнялся одновременный DML.

  • stage/innodb/alter table (end): Включает любую оставшуюся работу, которая появилась после фазы сброса, такую как повторное применение DML, выполненного на таблице во время выполнения оператора ALTER TABLE.

Примечание

В настоящее время события стадии оператора ALTER TABLE не учитывают добавление пространственных индексов.

Пример мониторинга ALTER TABLE с помощью Performance Schema

Следующий пример демонстрирует, как включить инструменты событий стадии stage/innodb/alter table% и связанные таблицы потребителей для отслеживания прогресса оператора ALTER TABLE. Сведения об инструментах событий стадии Performance Schema и связанных потребителях см. в разделе 25.12.5, «Таблицы событий стадии Performance Schema».

  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_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
    
  3. Выполните операцию ALTER TABLE. В этом примере к таблице employees в базе данных примеров employees добавляется столбец middle_name.

    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 путем запроса к таблице Performance Schema 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_ESTIMATED было пересчитано во время обработки ALTER TABLE. Оцененная работа после завершения начальной стадии составила 1213. Когда завершилась обработка ALTER TABLE, значение WORK_ESTIMATED было установлено на фактическое значение, которое составляет 1981.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/monitor-alter-table-performance-schema.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API