我正在尝试使用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"
Run Code Online (Sandbox Code Playgroud)
这适用于前几十万个记录,但随后每个后续加载的插入时间似乎都在增长(从我杀死它之前每个负载大约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
Run Code Online (Sandbox Code Playgroud)
我还尝试加载一个包含所有行但没有运气的CSV - 这在我杀死它之前跑了超过2个小时.
还有什么可以加速这个,因为这似乎只是加载12m记录的过多时间?