mysql load data 大数据文件,太慢了

2019-09-02 16:24:44 +08:00
 lewin5

之前有用过 load data 100G 的 CSV 文件导入单表,没有约束和索引,一次性导入差不多用了三个小时,速度差不多是 11MB/s ; 现在用 load data 导入 10g 的 dat 文件(想使用 tpcds 生成的数据文件)到单表,也没有使用约束和索引,发现出奇的慢,已经三天了,现在速度 1 个小时才 100MB。 考虑到是单表,事务我就一次 load data 一次 commit,也没有拆分文件; 两次情况差不多,没有特别改 my.cnf 配置文件,甚至 100g 的文件里有 100 个字段,而 10g 的才 18 个字段,导入文件内容的格式和分隔符也都一样,不知道这么慢的原因是什么,为什么小一点的还慢,慢的离谱有点。 ps:导 10g 的时候我稍微调大了一个参数 max_allowed_packet = 128M,其他没动过。

有对 mysql 了解的大大提供点建议 help 一下咩,谢谢了。

6512 次点击
所在节点    MySQL
4 条回复
neocanable
2019-09-02 16:47:36 +08:00
我觉得还是贴一下你的 my.cnf 吧,表的引擎是啥,innodb ?
log buffer
io threads
buffer pool size 这些参数。
dat 的分割是什么,我觉得这些都有得考虑。
fuyufjh
2019-09-02 18:35:00 +08:00
数据文件 split 成 10 份,然后开 10 个进程
lewin5
2019-09-18 09:46:36 +08:00
@neocanable
my.cnf:
skip-log-bin
innodb_doublewrite = 0
innodb_log_file_size = 2048M
innodb_log_buffer_size=2048M
innodb_flush_log_at_trx_commit = 0
innodb_buffer_pool_size = 10240M #大概内存的 70%

set_sql_log_bin=0
像上改了之后,这样就快很多了,有可能之前是写日志,内存分配太小,有的表一次性导入事务太大,写到磁盘了。然后 20g 大概用了 40 分钟;后面有张表 30 多 g,可能事务太大,undo(10g)写不下又变慢了,mysql 有什么自动 commit 的办法吗,load data 的时候。
lewin5
2019-09-18 09:47:35 +08:00
@fuyufjh
主要表有点多,这样弄的挺麻烦的,有没有什么办法在 load data 的时候设置 commit(),拆分一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597240

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX