Я пытаюсь массово загрузить около 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 минут на загрузку, прежде чем я ее убил).
Я работаю на машине с 8 ГБ ОЗУ и установил параметры 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-миллионных записей?
PRIMARY KEY
. Или, если бы вы могли, ремонт стоил бы ужасно долго. - person Rick James   schedule 12.09.2016