我需要使用load将400万行数据加载到MySQL InnoDB表中,并且想知道是否有服务器配置选项可以调整以获得更快的负载。
加载200万行花了我15分钟的时间,我认为LOAD DATA INFILE的性能令人失望。我的陈述是这样的
将数据本地INFILE 'path/file.csv‘加载到表字段中,该表字段以’‘、’n‘终止于'\n’忽略1行(column1、column2等);
发布于 2015-04-21 02:44:35
尽管LOAD DATA INFILE可以针对InnoDB工作,但在交换和瓶颈接管之前,InnoDB有太多的方法被挖掘到极限。
以下是InnoDB的图片表示(来自Percona CTO Vadim Tkachenko)

瓶颈将从以下结构中挖掘出来
下面是我过去的一些文章,其中讨论了如何使用InnoDB加载数据信息
Feb 06, 2012:加载数据(400 k行)信息大约需要7分钟,不能终止“日志慢查询”进程吗?Jan 11, 2013:在使用MySQL引擎输入少量数据后,InnoDB加载数据信息的速度降低了80%Jan 12, 2013:在mysql分析LOAD数据INFILE语句中,“系统锁定”意味着什么?将文件分解为20个较小的文件。
不要对一个200万行文件执行一个LOAD DATA INFILE,而是对20个文件执行20 LOAD DATA INFILE,每个文件有10万行。
好处:减少对InnoDB管道的压力
发布于 2015-04-21 03:48:53
我敢打赌你现在是受I/O约束的。这意味着没有什么能加快速度。(罗兰多的建议可能是徒劳的。)
让我们看得更深些。这是一个经常性的任务吗?如果是,多久一次?等待重新加载表的所有内容都被阻止了吗?简单的解决方案:加载到一个不同的表中,然后执行一个双RENAME TABLE来交换它。只有毫秒的停机时间。
数据来自另一台机器吗?将网络用于LOAD的“输入”端,而不是让一个磁盘为读写而斗争。
你有很多索引吗?回答这个问题有几个方向。让我们先看看SHOW CREATE TABLE,然后再把这些树剥掉(S)。
整个负载需要是单个事务吗?由于日志文件没有溢出,多个事务可能会更快。(我见过2倍。)
https://dba.stackexchange.com/questions/98384
复制相似问题