7.5.4.1 Преобразование таблиц MyISAM в формат InnoDB
В InnoDB отсутствует специальная оптимизация создания отдельных индексов.
Таким образом, этот формат не обеспечивает экспорта и импорта таблиц с
последующим созданием индексов. Самый быстрый способ преобразовать таблицу
в формат InnoDB - напрямую вставить данные в таблицу InnoDB,
воспользовавшись командой ALTER TABLE ... TYPE=INNODB
, или создать пустую
таблицу InnoDB с такой же структурой и вставить строки при помощи команды
INSERT INTO ... SELECT * FROM ...
.
Чтобы лучше контролировать процесс вставки, большие таблицы желательно
вставлять по частям:
INSERT INTO newtable SELECT * FROM oldtable
WHERE yourkey > something AND yourkey <= somethingelse;
После того, как все данные будут вставлены, таблицы можно будет
переименовать.
Во время преобразования больших таблиц необходимо задать достаточно
большой размер динамического буфера InnoDB, чтобы снизить количество
дисковых операций ввода/вывода. Однако размер буфера не должен превышать
80% физической памяти компьютера. Следует установить большие размеры для
файлов журналов InnoDB, а также большой размер буфера журналов.
Убедитесь, что у вас достаточно свободного пространства для табличной
области: таблицы InnoDB занимают намного больше места, чем таблицы MyISAM.
Если во время выполнения команды ALTER TABLE
будет исчерпано свободное
дисковое пространство, начнется выполнение отката, и это может занять
несколько часов, если диск заполнен. Во время вставок для таблицы InnoDB
используется буфер вставки, чтобы произвести объединение вторичных
индексных записей с индексными таблицами при помощи групповых операций.
Это позволяет значительно снизить интенсивность дисковых операций
ввода/вывода. При откате такой механизм не используется, поэтому откат
может занять в 30 раз больше времени, чем вставка.
В случае, если началось выполнение отката и база данных не содержит ценной
информации, лучше прервать этот процесс и удалить все данные InnoDB, файлы
журналов, а также все таблицы InnoDB (файлы с расширением `.frm'), и начать
свою работу сначала, а не ждать завершения выполнения миллионов операций
ввода/вывода диска.