Прискорити імпорт даних в myisam таблицю mysql

Сьогодні треба було залити в базу, в таблицю MyIsam близько 100 млн записів і все б нічого, але на моєму другому маленькому сервачке, це відбувалося дуже довго, причина була в тому, що на ньому всього 700 мб ОЗУ.

Залишив на ніч, до ранку залилося близько 4 млн, однак це все одно дуже повільно, тоді-то я і подумав, що проблема криється в тому, що індекси читаються з диска - це і причина повільній швидкості. Треба зауважити, що записи в таблиці повинні бути унікальними, саме тому і використовувався унікальний індекс.

Загалом, поміркувавши я вирішив переконатися в правоті своїх думок, і поліз згадувати, як збільшити кількість ОЗУ, що виділяється для індексів MySQL. Рішення не змусило себе довго чекати, і я знайшов ось цю замітку: Import data faster. У ній якраз був той параметр який я шукав (я знав що він є, але не пам'ятав точного назви): key-buffer. Саме він і відповідав за буфер індексів.

Після цього, я переніс скрипт з сервачка, до себе на робочий комп'ютер з 16 Гб оперативки, налаштував в файлик my.cnf параметр key_buffer_size збільшивши його до 10Гб. І запустив скрипт, десь за годину скрипт впорався з роботою і я отримав 20 млн унікальних записів. Тобто зміною однієї цифри і переходом на більш потужне залізо, я виконав роботу в 5 разів швидше (якщо б залишив на сервачке, я б чекав завершення ще: (20 / 4-1) * 10 = 40 годин).

Після того як всі давно були імпортовані, я просто скопіював бінарні файли бази на маленький сервачок, тим самим перенісши вже готову базу.

Прискорити імпорт даних в myisam таблицю mysql

Картинка взята з blog.marcocantu.com

У нас заробив ФОРУМ. Всі питання, які не стосуються статті, а так само питання по конкретно вашого випадку потрібно ставити і обговорювати саме там, в розділі "Допомога користувачам".

Схожі статті