西数蓝盘批量写入, 主键 uuid, 无限掉速

2021-03-30 15:52:46 +08:00
 bthulu

家用电脑, 西数蓝盘, 系统 Centos7, 用 docker 装了个 percona mysql 5.7.33. 创建了这么一张表, 执行批量写入测试.

CREATE TABLE `uc_user` (
  `ID` varchar(32) NOT NULL,
  `USER_NAME` varchar(20) NOT NULL,
  `USER_PWD` varchar(40) NOT NULL,
  `BIRTHDAY` datetime NOT NULL,
  `NAME` varchar(10) NOT NULL,
  `USER_ICON` varchar(200) NOT NULL,
  `SEX` varchar(1) NOT NULL,
  `NICKNAME` varchar(20) NOT NULL,
  `STAT` varchar(16) NOT NULL,
  `USER_MALL` double NOT NULL,
  `LAST_LOGIN_DATE` datetime NOT NULL,
  `LAST_LOGIN_IP` varchar(15) NOT NULL,
  `SRC_OPEN_USER_ID` double NOT NULL,
  `EMAIL` varchar(80) NOT NULL,
  `MOBILE` varchar(11) NOT NULL,
  `IS_DEL` decimal(1,0) NOT NULL,
  `IS_EMAIL_CONFIRMED` decimal(1,0) NOT NULL,
  `IS_PHONE_CONFIRMED` decimal(1,0) NOT NULL,
  `CREATER` varchar(32) NOT NULL,
  `CREATE_DATE` datetime NOT NULL,
  `UPDATE_DATE` datetime NOT NULL,
  `MAC` varchar(17) NOT NULL,
  `SOURCE` varchar(4) NOT NULL,
  `ACTIVATE` varchar(4) NOT NULL,
  `ACTIVATE_TYPE` varchar(4) NOT NULL,
  `IS_LIFE` decimal(1,0) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

每写入 500 条 commit 一次, 最终结果是, 随着写入量的增加, 每秒写入量逐步递减. 而我换成阿里云的 ecs, 同样在上面起了个 mysql5.7.33, 每秒写入量却能稳定在 4000. 这里的 id 是 uuid. 当把 id 换成自增主键时, 家用电脑每秒写入量就能稳定在 12000 了. 所以, 这里是不是因为西数蓝盘长时间 4k 随机读写掉速造成的? 而阿里云用的可能是西数黑盘, 4k 随机读写性能比较稳定?

已添加 9.6 万条数据, 每秒写入 6000
已添加 9.7 万条数据, 每秒写入 6062
...
已添加 20.0 万条数据, 每秒写入 5882
已添加 20.1 万条数据, 每秒写入 5742
...
已添加 22.0 万条数据, 每秒写入 5365
已添加 24.1 万条数据, 每秒写入 4820
已添加 26.0 万条数据, 每秒写入 4333
已添加 28.0 万条数据, 每秒写入 3888
已添加 30.0 万条数据, 每秒写入 3333
...
已添加 35.0 万条数据, 每秒写入 2397
已添加 40.0 万条数据, 每秒写入 1860
已添加 45.0 万条数据, 每秒写入 1525
已添加 50.0 万条数据, 每秒写入 1295
2946 次点击
所在节点    MySQL
24 条回复
loginv2
2021-03-30 15:57:48 +08:00
阿里云不太可能用家用型号吧
关注一下写入时温度?
murmur
2021-03-30 15:57:54 +08:00
你的蓝盘是叠瓦盘么,叠瓦盘只适合做冷仓库不适合做并发,缓存区内很好,出了缓存稍微有点读写并发就趴窝
lewis89
2021-03-30 15:59:18 +08:00
不好说 可能蓝盘转速太差了吧 会不会是这样...
CallMeReznov
2021-03-30 15:59:53 +08:00
缓内 VS 缓外
ch2
2021-03-30 16:09:17 +08:00
任务管理器打开看看磁盘性能指标就知道了,大量随机写的时候,smr 的响应时间会暴涨
lu5je0
2021-03-30 16:11:46 +08:00
innodb 页分裂
matrix67
2021-03-30 16:12:27 +08:00
测硬盘用 fio 先跑啊
lasfresas
2021-03-30 16:18:39 +08:00
1.他们用的盘更好,不是蓝盘也不是黑盘
2.raid
lewis89
2021-03-30 16:21:23 +08:00
@ch2 可能楼主新买的蓝盘吧,现在市面上清一色的蓝盘 都是 SMR 写入一次要刷写 0-4 个磁道 ,确实随机写的话,如果缓存写满了,掉速是难以避免的..
goodryb
2021-03-30 16:30:43 +08:00
首先,云厂商至少用的也是企业级的硬盘,不管是 HDD 还是 SSD
其次,除了本地盘,云盘全部采用的是分布式存储技术,也就是说你的数据是分散在多块硬盘上的,性能根据你购买的存储规格各有不同,但基本都能保证偏差不多
love
2021-03-30 16:51:28 +08:00
我以为 mysql 别用随机主键是基本共识了呢
uuid 你不但当主键还用了 varchar(32)多费一倍内存
ak47iej
2021-03-30 17:03:09 +08:00
WD 蓝盘 HDD 除了 1T 是 7200rpm+CMR, 以上的全都是 5400rpm+smr....写入肯定感人,买 ssd 蓝盘就没这个问题了
MeteorCat
2021-03-30 17:06:25 +08:00
企业级硬盘和家用级硬盘不一样,人家那是 sas 硬盘
liprais
2021-03-30 17:30:17 +08:00
测下 iops 呗
yc8332
2021-03-30 17:32:45 +08:00
uuid 做主键。这个影响性能
opengps
2021-03-30 17:59:22 +08:00
这个问题,我遇到了,关键字“聚集索引”,参考下我的博客: https://www.opengps.cn/Blog/View.aspx?id=284&from=v2ex
bthulu
2021-03-30 18:19:12 +08:00
@opengps @yc8332 跟聚集索引无关. 聚集索引是会降低性能. 但是家用机降低十分严重, 阿里云主机就影响不大, 同样都是 uuid, 同样是聚集索引, 那他们之间的性能差别, 是怎么来的?
opengps
2021-03-30 19:27:30 +08:00
@bthulu 你还没看我博客要说的重点,我的意思是,用聚集索引决定物理写入位置是尾部追加,从而避免因为维护默认主键索引带来的额外性能损耗。另外,云服务器的硬盘本身是个弱点,云硬盘的 io 本身就是严重损失的
systemcall
2021-03-30 19:34:15 +08:00
去买个 SSD,用一下 SSD,就知道区别了
话说现在用电脑还有不上 SSD 的吗? 200 多就可以买个铠侠 240G SSD 了,那个就可以日常使用了
kokutou
2021-03-30 19:38:31 +08:00
报出型号嘛...

如果你看 1t 以上的容量好像很便宜就买了, 那大概率买到叠瓦...

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

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

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

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

© 2021 V2EX