Создание индекса MySQL медленно (на EC2) - PullRequest
2 голосов
/ 09 октября 2009

У меня довольно простая таблица

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.

1 Ответ

2 голосов
/ 13 октября 2009

Полученные предложения верны. Я подозреваю, что сделанные вами изменения не вступили в силу. Попробуйте внести изменения в my.cnf и перезапустите сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...