MySQL 5.7 изменяет блокировку оператора DDL таблицы, но должна допускать одновременный DML

0

Следующий запрос состоит из изменений, которые каждый должен разрешать параллельный DML:

ALTER TABLE sometable
  DROP INDEX index1_on_column1,
  DROP INDEX index2_on_column2,
  DROP INDEX index3_on_column1_and_column2,
  DROP COLUMN column1,
  DROP COLUMN column2;

В таблице содержится около 80 миллионов записей. Когда я запускал запрос, он выглядел как заблокированный доступ/блокировка.

Кто-нибудь знает, почему/как это заблокировало бы таблицу?

Добавление явного LOCK=NONE должно привести к тому, что это можно сделать (или выбросить ошибку, если оно не удается), но из документов не видно, что это обязательная инструкция для предотвращения блокировки.

Теги:
innodb
ddl
dml

2 ответа

0
Лучший ответ

Итак, в принципе, без объяснения LOCK=NONE вы не можете быть уверены в том, как MySql решит выполнить изменение DML. Если он не может действовать без блокировки, и вы указываете LOCK=NONE вы получите сообщение об ошибке при выполнении команды, но если вы не укажете LOCK=NONE и блокировки будут отброшены, это в основном приведет к тому, что Mysql выполнит изменить таблицу.

0

Для больших таблиц вы должны использовать параллельную копию, чтобы избежать блокировки записи. Даже если чтение разрешено, весь процесс может быть заблокирован из-за одной записи.

Такие инструменты, как Percona Toolkit, великолепны. Я использовал его на таблицах 2GB (InnoDB с внешними ключами), восстановление потребовалось 3-5 минут, но таблица была недоступна всего за несколько секунд.

  • 1
    Да, раньше использовали инструмент изменения схемы percona. Хорошее решение, если вы можете терпеть несколько секунд, когда таблица может быть недоступна. В настоящее время я нахожусь в среде, где даже эта задержка слишком велика, поэтому иногда мы модифицируем реплицированное ведомое устройство, а затем меняем мастер.
  • 0
    @Ray Я не понимаю, как вы можете не потерять данные при таком обмене ... вы разрешаете только чтение во время обмена?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню