Я загружаю файл объемом 100 ГБ через LOAD DATA INFILE. У меня был хороший успех с MyISAM, несколько часов и все готово.
Я пытаюсь это сейчас, используя InnoDB. Загрузка начинается быстро со скоростью более 10 МБ / с (наблюдение за ростом файла таблицы file_per_table
включено).
Но после примерно 5 ГБ данных он замедляется до диапазона 2-4 МБ / с, а когда я получаю более 20 ГБ, он снижается примерно до 2 МБ / с.
Размер буферных пулов InnoDB составляет 8G. И перед выполнением команды LOAD DATA INFILE я сделал следующее:
SET @@session.sql_log_bin=0;
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
alter table item_load disable keys;
//Run LOAD DATA INFILE....
Я не вижу причины, по которой все начинается хорошо и со временем замедляется.
Кроме того, используя те же настройки, я выполнил ту же команду LOAD DATA INFILE с таблицей, используя InnoDB и MyISAM и набор тестовых данных 5 ГБ, MyISAM был в 20 раз быстрее:
InnoDB:
mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (21 min 25.38 sec)
Records: 2630886 Deleted: 0 Skipped: 0 Warnings: 6
MyISAM:
mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (1 min 2.52 sec)
Records: 2630886 Deleted: 0 Skipped: 0 Warnings: 6
Что-нибудь еще, я должен рассмотреть попытку? Движок MyISAM способен намного лучше поддерживать скорость загрузки.
Дополнительные детали:
Я пытался загрузить файлы по отдельности, без разницы.
Кстати, у меня 150 файлов по 500 МБ каждый, в каждом файле ключи сортируются.
После получения 40 ГБ за ночь, 12 часов спустя, скорость загрузки снизилась до 0,5 МБ / с, что означает, что операция практически невозможна.
Других ответов на подобные вопросы на других форумах я не нашел, мне кажется, что InnoDB не поддерживает загрузку больших объемов данных в таблицы размером более нескольких ГБ.