14.13.6 Ограничения онлайн DDL операций
Следующие ограничения применяются к онлайн DDL операциям:
Таблица копируется при создании индекса на
TEMPORARY TABLE.Оператор
ALTER TABLELOCK=NONEне разрешен, если на таблице имеютсяON...CASCADEилиON...SET NULLограничения.Перед завершением онлайн DDL операции необходимо дождаться завершения транзакций, которые держат метаданные блокировки на таблице (commit или rollback). Онлайн DDL операция может временно потребовать эксклюзивную блокировку метаданных на таблице во время выполнения и всегда требует ее в финальной фазе операции при обновлении определения таблицы. Следовательно, транзакции, удерживающие блокировки метаданных на таблице, могут привести к блокировке онлайн DDL операции. Транзакции, удерживающие блокировки метаданных на таблице, могут быть начаты до или во время онлайн DDL операции. Длительная или неактивная транзакция, удерживающая блокировку метаданных на таблице, может привести к таймауту онлайн DDL операции.
Онлайн DDL операция над таблицей, участвующей в внешнем ключевом отношении, не ждет завершения транзакции, выполняемой над другой таблицей в этом отношении (commit или rollback). Транзакция удерживает эксклюзивную блокировку метаданных на таблице, которую она обновляет, и общую блокировку метаданных на связанной таблице внешнего ключа (необходимая для проверки внешнего ключа). Общая блокировка метаданных позволяет онлайн DDL операции продолжить, но блокирует ее в финальной фазе, когда требуется эксклюзивная блокировка для обновления определения таблицы. Эта ситуация может привести к тупиковым ситуациям, так как другие транзакции ждут завершения онлайн DDL операции.
При выполнении онлайн DDL операции, поток, выполняющий оператор
ALTER TABLE, применяет онлайн журнал DML операций, которые выполнялись одновременно на той же таблице другими потоками подключений. При применении DML операций может возникнуть ошибка дублирования ключа (Ошибка 1062 (23000): Дублирующая запись), даже если дублирование временное и будет отменено более поздней записью в онлайн журнале. Это аналогично проверке ограничения внешнего ключа вInnoDB, где ограничения должны соблюдаться во время транзакции.OPTIMIZE TABLEдля таблицыInnoDBсопоставляется с операциейALTER TABLEдля перестроения таблицы и обновления статистики индексов, освобождения неиспользуемого пространства в кластеризованном индексе. Вторичные индексы создаются неэффективно, так как ключи вставляются в порядке их появления в первичном ключе.OPTIMIZE TABLEподдерживается с добавлением онлайн DDL поддержки перестройки обычных и разнесенныхInnoDBтаблиц.-
Таблицы, созданные до MySQL 5.6, которые содержат временные столбцы (
DATE,DATETIMEилиTIMESTAMP) и не были перестроены с помощьюALGORITHM=COPY, не поддерживаютALGORITHM=INPLACE. В этом случае операцияALTER TABLE ... ALGORITHM=INPLACEвозвращает следующую ошибку:ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
-
Следующие ограничения обычно применяются к онлайн DDL операциям над большими таблицами, которые включают перестройку таблицы:
Нет механизма для приостановки онлайн DDL операции или ограничения использования ввода-вывода или ЦП для онлайн DDL операции.
Откат онлайн DDL операции может быть затратным в случае ее сбоя.
Длительные онлайн DDL операции могут привести к задержкам репликации. Онлайн DDL операция должна завершиться на источнике перед запуском на реплике. Кроме того, DML, обработанный одновременно на источнике, обрабатывается на реплике только после завершения DDL операции на реплике.
Дополнительную информацию об выполнении онлайн DDL операций над большими таблицами см. в Раздел 14.13.2, “Производительность и конкурентность онлайн DDL операций”.
© 2025 Oracle
Licensed under the GPLv2 License.