Mysql меняет рабочий стол MyISAM на InnoDB

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

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

Ответ 1

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

ALTER TABLE table_name ENGINE = InnoDB;

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

Ответ 2

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

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