Как ускорить загрузку данных в InnoDB (LOAD DATA INFILE)?

Я хочу ускорить загрузку данных.

Я использую MySQL 5.5, InnoDB и имею 1M строк данных (файл 65Mb). Это займет 5 минут.

Какие настройки и команды mysql влияют на скорость ЗАГРУЗКИ ДАННЫХ INFILE для InnoDB?

Спасибо.

5 ответов

Решение

Я могу порекомендовать эти настройки для улучшения времени загрузки:

  • innodb_doublewrite = 0
  • innodb_support_xa = 0
  • innodb_buffer_pool_size = (50-80% системной памяти)
  • innodb_log_file_size = (большое количество - 256M и т. д.)
  • innodb_flush_log_at_trx_commit = 0

Помимо настроек, есть некоторые вещи, которые вы можете сделать сами:

  • Создавайте индексы после загрузки (это новая оптимизация с плагином 5.5 / InnoDB).
  • Сортируйте файл данных перед загрузкой.
  • Разбейте файл данных и загрузите параллельно.

Попробуйте удалить индексы и триггеры. Вы можете воссоздать их после загрузки. Также обратите внимание на использование некоторых настроек высокой нагрузки в my-огромный.cnf вместо значений по умолчанию.

Еще несколько настроек производительности innodb:

http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

Это может быть не совсем то, что вы ищете, но это трюк, который я использовал в прошлом

ALTER TABLE TABLE_NAME DISABLE KEYS;
LOAD DATA INFILE ... ;
ALTER TABLE TABLE_NAME ENABLE KEYS;

Надеюсь, поможет.

Также убедитесь, что двоичное ведение журнала отключено, если это возможно.

Если вы спешите, потому что заменяете содержимое активной таблицы, сделайте это следующим образом:

CREATE TABLE new LIKE live;
LOAD DATA ... INTO new;
RENAME TABLE live TO old, new TO live;
DROP TABLE old;

RENAME является "мгновенным" и атомарным, поэтому вы "никогда" не спускаетесь, независимо от размера стола.

(Следовательно, вам не нужно беспокоиться о ускорении LOAD.)

Другие вопросы по тегам