Spec-Zone.ru › MySQL 8.4

17.16.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 и связанных потребителях см. в разделе 29.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-8.4-en/monitor-alter-table-performance-schema.html

Spec-Zone.ru

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