Как ускорить загрузку данных в 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
.)