首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要使MySQL的加载数据本地INFILE更快地加载大型数据

需要使MySQL的加载数据本地INFILE更快地加载大型数据
EN

Database Administration用户
提问于 2015-04-21 01:55:08
回答 2查看 7.6K关注 0票数 7

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

加载200万行花了我15分钟的时间,我认为LOAD DATA INFILE的性能令人失望。我的陈述是这样的

将数据本地INFILE 'path/file.csv‘加载到表字段中,该表字段以’‘、’n‘终止于'\n’忽略1行(column1、column2等);

EN

回答 2

Database Administration用户

回答已采纳

发布于 2015-04-21 02:44:35

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

以下是InnoDB的图片表示(来自Percona CTO Vadim Tkachenko)

瓶颈将从以下结构中挖掘出来

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

下面是我过去的一些文章,其中讨论了如何使用InnoDB加载数据信息

建议#1

将文件分解为20个较小的文件。

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

好处:减少对InnoDB管道的压力

建议#2 (可选)

票数 1
EN

Database Administration用户

发布于 2015-04-21 03:48:53

我敢打赌你现在是受I/O约束的。这意味着没有什么能加快速度。(罗兰多的建议可能是徒劳的。)

让我们看得更深些。这是一个经常性的任务吗?如果是,多久一次?等待重新加载表的所有内容都被阻止了吗?简单的解决方案:加载到一个不同的表中,然后执行一个双RENAME TABLE来交换它。只有毫秒的停机时间。

数据来自另一台机器吗?将网络用于LOAD的“输入”端,而不是让一个磁盘为读写而斗争。

你有很多索引吗?回答这个问题有几个方向。让我们先看看SHOW CREATE TABLE,然后再把这些树剥掉(S)。

整个负载需要是单个事务吗?由于日志文件没有溢出,多个事务可能会更快。(我见过2倍。)

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/98384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档