为什么 MySQL8.0 比 MySQL5.7 的插入性能差了这么多?

2020-02-27 00:12:23 +08:00
 epicq

同样的代码、同样的数据、同一台的机器

批量插入 860W 行数据

MySQL8.0 只有 600 行 /s

MySQL5.7 轻松破 7K 行 /s

都是 MyISAM 引擎

8.0 是需要什么特殊的优化技巧吗?

11266 次点击
所在节点    MySQL
43 条回复
nozer
2020-02-27 09:17:19 +08:00
如果你要批量导入数据的话,不建议使用 insert 的方式。
采用 load into 的方式可以更快的导入数据,而且通过 load into 的方式,即使使用 InnoDB 引擎,并开启事务也可以很快的导入数据。
具体用法你可以查阅官方手册: https://dev.mysql.com/doc/refman/8.0/en/load-data.html

具体来说,你需要先将数据生成为一份简单格式的本地文件,比如 csv 之类的。
然后对该文件执行 load into 操作。

性能跟 insert 完全不在一个档次。
nozer
2020-02-27 09:21:58 +08:00
是 load data,写错了。
FaceBug
2020-02-27 09:41:18 +08:00
bin_log 都关了吗
a719114136
2020-02-27 11:00:29 +08:00
有可能是 bin log 的关系,5.7 默认关闭 bin log 的。

另外和运行环境也有关系,mac 上使用 docker 的话会和 linux 上的性能有差距。
yafoo
2020-02-27 11:00:35 +08:00
一直以为开启事物会变慢,原来会变快
wps353
2020-02-27 11:03:00 +08:00
主要的配置参数一样吗?
littlewing
2020-02-27 11:04:43 +08:00
条件不足,无法判断

确定所有参数都一样?
Maboroshii
2020-02-27 11:06:22 +08:00
关注一下
nikoo
2020-02-27 11:16:52 +08:00
@epicq 在 mysql8 my.cnf 的 [mysqld] 下增加:
[mysqld]
skip-log-bin

重启后再测一下看看?测试结果 @我下
epicq
2020-02-27 15:46:34 +08:00
@nikoo
我试了下
在 my.ini 的[mysqld]下添加 skip-log-bin 后,show variables like 'log_bin'的值还是 ON
不过在 my.ini 的最后一行,加入 skip-log-bin 后,'log_bin'的值变成了 OFF
重启之后再测,MySQL8.0 下 InnoDB 还是只有 600 行 /s,磁盘占用依旧 85%
epicq
2020-02-27 15:49:21 +08:00
@iConnect surface pro 6,i5-8250u_8G 内存_128G 固态
epicq
2020-02-27 16:01:41 +08:00
@leviathan0992
@cepczkd
@a719114136
@wps353
@littlewing

my.ini 的配置都是各自版本默认的
加了 skip-log-bin,性能还是很烂
TangMonk
2020-02-27 16:04:25 +08:00
@enlight #20 MongoDB 就是辣鸡
yanyueio
2020-02-27 16:06:39 +08:00
bin log 关闭了还是一样的结果,那会不会是因为 5.7 是批处理插入的? 而 8.0 则没有?

需要查询相关操作 log 来排查看看。
epicq
2020-02-27 16:08:19 +08:00
@nozer 我其实把这个数据保存进数据库就是为了筛选一下然后存成 csv...你要我先处理成 csv 再保存到数据库,我宁愿等 4 个小时。而且目前 5.7 的 MyISAM 插入 860W 行只要 1100 秒左右,我的需求已经解决了,我只是惊讶于为什么性能差距这么大
LeeSeoung
2020-02-27 16:44:34 +08:00
楼主解决了记得回头分享下原因
pinews
2020-02-27 17:33:25 +08:00
据说 5.7 好比小汽车,8.0 好比火车,你是不是把火车当汽车用了?
imycc
2020-02-28 01:23:50 +08:00
之前处理过 5.5 升级到 5.7 的事情,还没用上 8。

我怀疑是配置不一致导致的。你可以查一下 MySQL8.0 的官方升级文档,然后对照着自己的 5.7 的配置,看一下哪些选项在新版本中被禁用了。还可以考虑下是不是以前 5.7 配置了什么优化项,没有配到 8.0 上。
freelancher
2020-02-28 16:16:06 +08:00
O 了。我没有去跟后面的 MYSQL 版本了。工具是要自己用的。你解决不了问题,那你就试着换一个工具呀。
epicq
2020-02-29 15:08:39 +08:00
@imycc 我不是升级,我是两个都装了,各自默认的 my.ini 配置,分别测试出来的结果

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

https://ex.noerr.eu.org/t/647885

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

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

© 2021 V2EX