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».
-
Включить инструменты
stage/innodb/alter%:mysql>
UPDATE performance_schema.setup_instrumentsSET ENABLED = 'YES'WHERE NAME LIKE 'stage/innodb/alter%';Query 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>
UPDATE performance_schema.setup_consumersSET ENABLED = 'YES'WHERE NAME LIKE '%stages%';Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 -
Выполните операцию
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 -
Проверьте прогресс операции
ALTER TABLEпутем запроса к таблице Performance Schemaevents_stages_current. Событие стадии, которое отображается, отличается в зависимости от текущей фазы оператораALTER TABLE. СтолбецWORK_COMPLETEDпоказывает завершенную работу. СтолбецWORK_ESTIMATEDпредоставляет оценку оставшейся работы.mysql>
SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATEDFROM 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_ESTIMATEDFROM 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.