У меня довольно простая таблица
requestparams (
requestid varchar(64) NOT NULL,
requestString text,
) ENGINE=MyISAM;
После заполнения таблицы «LOAD DATA» я меняю схему и делаю «requesttid» первичным ключом.
В этой таблице 11 миллионов строк, а размер данных меньше 2 ГБ (размер файла MYD.) Размер файла индекса составляет около 600 МБ в конце процесса.
Создание индекса занимает менее 20 минут на моем ноутбуке. Но когда я запустил процесс на Amazon EC2 (средний экземпляр), этот процесс занял более 12 часов. В течение всего процесса диск был перегружен с ожиданием ввода-вывода (см. top
) между 40-100%. Процессор в основном простаивал. Я не думаю, что диск на EC2 такой медленный.
В списке рассылки MySQL некоторые предлагали изменить переменные сервера myisam_sort_buffer_size & myisam_max_sort_file_size. Я установил их на 512 МБ и 4 ГБ соответственно. Но создание индекса было одинаково медленным. На самом деле использование памяти MySQL редко превышало 40 млн.
Как мне это исправить?
Решение: Помогло увеличение «key_buffer_size». Я установил это значение на 1 ГБ, и процесс завершился за 4 минуты. Убедитесь, что вы проверили новые настройки с помощью команды mysqladmin variables
.