Spec-Zone.ru › MySQL 8.4

17.12.8 Ограничения онлайн-DDL операций

Следующие ограничения применяются к онлайн-DDL операциям:

  • При создании индекса на TEMPORARY TABLE таблица копируется.

  • Оператор ALTER TABLE LOCK=NONE недопустим, если на таблице есть ON...CASCADE или ON...SET NULL ограничения.

  • Перед завершением онлайн-DDL операции в режиме замены, она должна подождать, пока транзакции, удерживающие метаданные блокировки на таблице, не завершатся или не отменятся. Онлайн-DDL операция может на короткое время потребовать эксклюзивную блокировку метаданных на таблице во время фазы выполнения и всегда требует её в заключительной фазе операции при обновлении определения таблицы. Вследствие этого, транзакции, удерживающие блокировки метаданных на таблице, могут блокировать онлайн-DDL операцию. Транзакции, удерживающие блокировки метаданных на таблице, могут быть начаты до или во время онлайн-DDL операции. Длительная или неактивная транзакция, удерживающая блокировку метаданных на таблице, может привести к таймауту онлайн-DDL операции.

  • При выполнении онлайн-DDL операции в режиме замены, поток, который выполняет оператор ALTER TABLE, применяет онлайн-лог DML операций, которые были выполнены параллельно на той же таблице из других потоков подключения. При применении DML операций может произойти ошибка дублирования ключа (ERROR 1062 (23000): Duplicate entry), даже если дублирование временное и будет отменено более поздним элементом в онлайн-логе. Это аналогично проверке ограничения внешнего ключа в 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 операций на больших таблицах, см. Раздел 17.12.2, «Производительность и одновременность онлайн-DDL операций».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/innodb-online-ddl-limitations.html

Spec-Zone.ru

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