我正在尝试使用 LOAD DATA INFILE(来自 CSV)将大约 12m 条记录批量加载到(本地)mysql 中的 InnoDB 表中,并发现它需要很长时间才能完成。
主键类型是 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 小时。
还有什么可以加快这个速度,因为这似乎是一个过多的时间来加载 12m 记录?