Как ускорить загрузку данных в InnoDB (LOAD DATA INFILE)? - PullRequest
7 голосов
/ 16 февраля 2011

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

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

Какие настройки и команды mysql влияют на скорость LOAD DATA INFILE для InnoDB?

Спасибо.

Ответы [ 5 ]

19 голосов
/ 19 февраля 2011

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

  • 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).
  • Сортировать файл данных перед загрузкой.
  • Разделить файл данных и загрузить параллельно.
4 голосов
/ 16 февраля 2011

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

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

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

2 голосов
/ 16 февраля 2011

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

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

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

0 голосов
/ 05 декабря 2015

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

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

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

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

0 голосов
/ 16 января 2015

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

...