需要让 MySQL 的 LOAD DATA LOCAL INFILE 加载大数据更快

sta*_*ker 6 mysql innodb

我需要使用 LOAD DATA INFILE 将 400 万行数据加载到 MySQL InnoDB 表中,并且想知道是否有我可以调整的服务器配置选项以获得更快的加载。

我花了 15 分钟来加载 200 万行,我认为 LOAD DATA INFILE 的性能令人失望。我的声明看起来像这样

LOAD DATA LOCAL INFILE 'path/file.csv' INTO TABLE table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES (column1, column2, etc);

Rol*_*DBA 1

尽管 LOAD DATA INFILE 可以针对 InnoDB 工作,但在交换和瓶颈接管之前,InnoDB 有太多方法会达到其极限。

这是 InnoDB 的图示(来自 Percona 首席技术官 Vadim Tkachenko)

InnoDB 管道

瓶颈将通过以下结构

  • InnoDB缓冲池
  • 事务日志(ib_lofile0、ib_logfile1)
  • 双写缓冲器
  • 插入缓冲区
  • 一个回滚段
  • 日志缓冲区

这是我过去的一些帖子,其中我讨论了 LOAD DATA INFILE 与 InnoDB

建议#1

将文件分成 20 个较小的文件。

不要LOAD DATA INFILE对 200 万行文件执行 1 次,而是LOAD DATA INFILE对 20 个文件执行 20 次,每个文件有 10 万行。

好处:减少 InnoDB 管道的压力

建议#2(可选)