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».
-
Включите инструменты
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.