Spec-Zone.ru › MySQL 9.2

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-9.2-en/monitor-alter-table-performance-schema.html

Spec-Zone.ru

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