улучшение производительности mysql load data infile

Я пытаюсь загрузить около 12 млн записей в таблицу InnoDB в (локальном) mysql с помощью LOAD DATA INFILE (из CSV) и обнаружил, что это занимает очень много времени.

Тип первичного ключа - UUID, и ключи в файлах данных не отсортированы.

Я разбил файл данных на файлы, содержащие 100000 записей, и импортировал его как:

mysql -e 'ALTER TABLE customer DISABLE KEYS;'
for file in *.csv
    mysql -e "SET sql_log_bin=0;SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;
    SET AUTOCOMMIT=0;LOAD DATA INFILE '${file}' INTO TABLE table 
    FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';  COMMIT"

Это работает нормально для первых нескольких сотен тысяч записей, но затем время вставки при каждой последующей загрузке, кажется, продолжает расти (с примерно 7 секунд до примерно 2 минут на загрузку, пока я не убил его.)

Я работаю на машине с 8GB RAM и установил параметры InnoDB в:

innodb_buffer_pool_size =1024M
innodb_additional_mem_pool_size =512M
innodb_log_file_size = 256M
innodb_log_buffer_size = 256M

Я также попробовал загрузить один CSV, содержащий все строки, безрезультатно - это продолжалось более 2 часов, пока я не убил его.

Есть ли что-нибудь еще, что могло бы ускорить это, так как это кажется чрезмерным временем для загрузки всего 12 млн. записей?

10
задан Michael 9 January 2012 в 15:05
поделиться