MySQL блокирует все, когда я выполняю команду alter table для большой таблицы

У меня проблема с MySQL.

У меня большая таблица (8,5 миллиона записей), и я выполнил команду alter table add index. Когда я это делаю, кажется, что все столы заблокированы.

Когда я выполнил list processlist, я увидел, что все процессы находятся в стадии сна, а изменение выполняется.

Почему это заблокировало бы всю таблицу в базе данных? Я начинаю получать ошибки тайм-аута.

Это ошибка конфигурации на моей стороне? что мне нужно сделать, чтобы это больше не повторилось?


person Mike    schedule 10.06.2013    source источник
comment
В этом блоге Oracle есть довольно актуальное объяснение блокировки с изменениями языка определения данных MySQL . Вероятно, вам следует указать, какую версию и механизм хранения вы используете.   -  person hardmath    schedule 10.06.2013
comment
Хотя этот аналогичный вопрос задавался здесь давно, он продолжает получать новые ответы выключить и включить. Стоит изучить идеи ...   -  person hardmath    schedule 10.06.2013
comment
хардмат. Спасибо за ответ. Я до сих пор не вижу решения этой проблемы. это что-то MySQL плохо справляется или?   -  person Mike    schedule 10.06.2013
comment
Привет Майк. Команда alter table изменяет DDL затронутой таблицы, поэтому большинство СУБД получит монопольную блокировку таблицы, чтобы выполнить такое изменение. Для MySQL было бы полезно знать версию и механизм хранения (например, InnoDB), который вы используете.   -  person hardmath    schedule 11.06.2013
comment
Я использую innoDB для механизма хранения. innodb_version 1.2.10, версия 5.6.10-log version_comment MySQL Community Server (GPL) version_compile_machine x86_64 version_compile_os Win64   -  person Mike    schedule 11.06.2013


Ответы (1)


Возможно, решение так же просто, как добавить предложение ALGORITHM = INPLACE в вашу команду ALTER TABLE...ADD INDEX.

Представление в прошлом году Online ALTER TABLE в MySQL 5.6 была направлена ​​на минимизацию воздействия, о котором вы сообщаете, когда такие команды DDL могут вызывать задержки и тайм-ауты для других процессов.

В соответствии с определенные ограничения, которые, вероятно, вас не коснутся, период времени, необходимый для монопольной блокировки изменяемой таблицы, теперь может быть сокращен до двух «коротких периодов в начале и в конце».

Обзор онлайн-DDL описывает историю и механизмы создания индексов (или их удаления) без трудоемкого копирования таблиц, которое использовалось в некоторых предыдущих версиях.

Подробный синтаксис для ALTER TABLE показывает, где падает ALGORITHM = INPLACE в схеме этой команды. В приведенном выше обзоре есть сводная таблица для онлайн-статуса операций DDL. Хотя синтаксис ALTER TABLE позволяет вам указывать LOCK=NONE (или LOCK=SHARED), по умолчанию MySQL 5.6 будет пытаться использовать этот режим для работы в сети.

person hardmath    schedule 10.06.2013