Ускорение конвертации из MyISAM в InnoDB - PullRequest
17 голосов
/ 17 января 2010

У меня есть MySQL 1,5 ГБ MySQL-таблица MySQL (данные 1,0 ГБ, индексы 0,5 ГБ) в работе, которую я собираюсь преобразовать в InnoDB.чтобы время простоя было как можно короче.

Мои вопросы:

  • Какие параметры конфигурации MySQL необходимо настроить для ускорения ALTER TABLE table_name ENGINE=InnoDB;?

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

Ответы [ 4 ]

13 голосов
/ 17 января 2010
  • Установка большого размера innodb_buffer_pool_size (2 ГБ или более)
  • предварительно прочитайте ваши старые файлы данных / индексов myisam с помощью команд оболочки
  • увеличение innodb_log_file_size (256 МБ)
  • Измените таблицу в параллельных потоках X, где X - количество ядер ЦП на вашем сервере
  • другие незначительные изменения только для преобразования (innodb_doublewrite = 0, innodb_flush_log_at_trx_commit = 0)

Установка innodb_buffer_pool_size как можно выше - это типичный способ ускорить создание таблиц innodb - ваш набор данных выглядит так, как будто он может вписаться в буферный пул innodb 2 ГБ, поэтому любой порядочный 64-битный сервер должен это допустить. alter table type = innodb также быстрее, чем решение dump + reimport, и его легко запустить параллельно.

Также убедитесь, что вы увеличили значение innodb_log_file_size по умолчанию с 5 МБ до 128 или 256 МБ. Осторожнее с этим, и он нуждается в чистом завершении работы + удаление старого файла ib_logfile *.

Если на вашем сервере есть что-то вроде 8 ГБ оперативной памяти, и вы используете 64-битную версию mysql, я бы предложил 2 ГБ innodb_buffer_pool, и вы даже можете предварительно прочитать старые файлы MYD и MYI перед закрытием для простоя, чтобы они могли быть в кеше страницы ОС, когда начнется настоящая работа.

Если вы также пойдете на незначительные изменения, имейте в виду, что вам нужно отменить их после преобразования (еще одно небольшое время простоя), чтобы ваши данные были в безопасности, хотя я сомневаюсь, что они того стоят для такого небольшого набора данных.

Удачи.

3 голосов
/ 17 января 2010

Если вы ищете быстрое (хотя и несколько lo-fi) решение, вы можете просто экспортировать данные в текстовый файл (через mysqldump), изменить тип таблицы на InnoDB в результирующем текстовом файле и затем повторно импортировать данные.

Тем не менее, вам нужно проверить это, импортировав в другую базу данных, чтобы убедиться в отсутствии проблем.

2 голосов
/ 08 декабря 2013

Использование pt-online-schema-change сделает вашу проблему неактуальной. pt-online-schema-change - это инструмент командной строки, разработанный Percona (возможно, лучшим консультантом MySQL в мире) для решения этой самой проблемы. Он позволяет вам выполнять операторы ALTER для любой таблицы, не блокируя операции чтения или записи, что, вероятно, является вашей АКТУАЛЬНОЙ целью, если вы говорите, что пытаетесь ускорить это преобразование в рабочей среде.

После установки Percona Toolkit вы просто запустите следующую команду в своей оболочке O / S:

$ pt-online-schema-change h=your_host.com,t=your_db.your_target_table --alter "ENGINE=InnoDB"
2 голосов
/ 18 января 2010

Таблица будет недоступна только для записи; чтение продолжит доступ к старой таблице MyISAM в течение действия ALTER.

Серьезно, перестройка таблицы 1.5G не должна занимать много времени, если ваше приложение не может выдержать такое время простоя, у вас должна быть уже установлена ​​система высокой доступности, которую вы можете использовать для этого. Предположительно, ваша служба технической поддержки может выложить уведомление, чтобы сообщить пользователям о времени простоя, и, при условии достаточного предупреждения, вы сделаете это в тихое время дня / недели (обычно мы считаем воскресное утро хорошим временем, но оно может варьироваться, если у вас много клиентов в мусульманских странах)

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

...