2014-02-03 3 views
10

На моем сайте у меня есть таблица посетителей с 10 миллионами строк.
Каждый запрос на сайт вставляет строку в таблицу, в случае, если таблица заблокирована (обычно оптимизируют запроса) посетители не могут попасть на сайт
Стол двигатель MyISAM, и я хочу, чтобы изменить его в InnoDB
у меня есть несколько вопросов:Mysql сменный настольный двигатель MyISAM to InnoDB

  • Как я могу изменить таблицу двигатель без останавливая мой сайт от работы
  • Существует способ оптимизации InnoDB таблицы без блокировки его

ответ

17

Самый простой способ

ALTER TABLE table_name ENGINE = InnoDB; 

Если вы используете InnoDB двигатель, вы не должны беспокоиться о блокировке таблиц, поскольку этот двигатель замки данных по строкам.

+0

Если я изменю двигатель от MyISAM до InnoDB, таблица будет заблокирована? – Idob

+0

Да, я так думаю. Но вы можете сделать это в то время, когда на вашем сайте меньше посетителей. –

+0

Я просто хочу быть уверенным, оптимизация таблицы InnoDB будет блокировать таблицу для записи или нет? – Idob

4

oleksii.svarychevskyi прав, InnoDB использует блокировки на уровне строк, но если вы делаете

ALTER TABLE table_name ENGINE = InnoDB;
изменить table_name из MyISAM в InnoDB, будет метаданные блокировки (на уровне таблицы), поскольку исходная таблица двигателя был MyIsam.
Если вы попытаетесь выполнить UPDATE над именем таблицы, этот UPDATE будет выставлен в очередь до окончания ALTER TABLE (если вы выполните ПОКАЗАТЬ ПОЛНЫЙ ПРОЦЕССИСТОР, вы увидите сообщение «Ожидание таблицы метаданных», связанное с UPDATE).

Смежные вопросы