家用电脑, 西数蓝盘, 系统 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
1
loginv2 2021-03-30 15:57:48 +08:00
阿里云不太可能用家用型号吧
关注一下写入时温度? |
2
murmur 2021-03-30 15:57:54 +08:00
你的蓝盘是叠瓦盘么,叠瓦盘只适合做冷仓库不适合做并发,缓存区内很好,出了缓存稍微有点读写并发就趴窝
|
3
lewis89 2021-03-30 15:59:18 +08:00
不好说 可能蓝盘转速太差了吧 会不会是这样...
|
4
CallMeReznov 2021-03-30 15:59:53 +08:00
缓内 VS 缓外
|
5
ch2 2021-03-30 16:09:17 +08:00 via iPhone
任务管理器打开看看磁盘性能指标就知道了,大量随机写的时候,smr 的响应时间会暴涨
|
6
lu5je0 2021-03-30 16:11:46 +08:00 1
innodb 页分裂
|
7
matrix67 2021-03-30 16:12:27 +08:00
测硬盘用 fio 先跑啊
|
8
lasfresas 2021-03-30 16:18:39 +08:00
1.他们用的盘更好,不是蓝盘也不是黑盘
2.raid |
9
lewis89 2021-03-30 16:21:23 +08:00
@ch2 可能楼主新买的蓝盘吧,现在市面上清一色的蓝盘 都是 SMR 写入一次要刷写 0-4 个磁道 ,确实随机写的话,如果缓存写满了,掉速是难以避免的..
|
10
goodryb 2021-03-30 16:30:43 +08:00
首先,云厂商至少用的也是企业级的硬盘,不管是 HDD 还是 SSD
其次,除了本地盘,云盘全部采用的是分布式存储技术,也就是说你的数据是分散在多块硬盘上的,性能根据你购买的存储规格各有不同,但基本都能保证偏差不多 |
11
love 2021-03-30 16:51:28 +08:00
我以为 mysql 别用随机主键是基本共识了呢
uuid 你不但当主键还用了 varchar(32)多费一倍内存 |
12
ak47iej 2021-03-30 17:03:09 +08:00
WD 蓝盘 HDD 除了 1T 是 7200rpm+CMR, 以上的全都是 5400rpm+smr....写入肯定感人,买 ssd 蓝盘就没这个问题了
|
13
MeteorCat 2021-03-30 17:06:25 +08:00 via Android
企业级硬盘和家用级硬盘不一样,人家那是 sas 硬盘
|
14
liprais 2021-03-30 17:30:17 +08:00
测下 iops 呗
|
15
yc8332 2021-03-30 17:32:45 +08:00
uuid 做主键。这个影响性能
|
16
opengps 2021-03-30 17:59:22 +08:00
这个问题,我遇到了,关键字“聚集索引”,参考下我的博客: https://www.opengps.cn/Blog/View.aspx?id=284&from=v2ex
|
17
bthulu OP |
18
opengps 2021-03-30 19:27:30 +08:00 via Android
@bthulu 你还没看我博客要说的重点,我的意思是,用聚集索引决定物理写入位置是尾部追加,从而避免因为维护默认主键索引带来的额外性能损耗。另外,云服务器的硬盘本身是个弱点,云硬盘的 io 本身就是严重损失的
|
19
systemcall 2021-03-30 19:34:15 +08:00
去买个 SSD,用一下 SSD,就知道区别了
话说现在用电脑还有不上 SSD 的吗? 200 多就可以买个铠侠 240G SSD 了,那个就可以日常使用了 |
20
kokutou 2021-03-30 19:38:31 +08:00
报出型号嘛...
如果你看 1t 以上的容量好像很便宜就买了, 那大概率买到叠瓦... |
21
exploreexe 2021-03-31 08:25:27 +08:00
手里的两块红盘刚报废,以后再也不会买西数的硬盘了,是真的垃圾。
|
22
wmjie 2021-03-31 08:45:36 +08:00
1. 建议不要用 uuid 做主键。
2. ecs 的用的哪个盘不重要,重要的是他是直接落盘了,还是会进行了特殊的调优:比如在内存缓存了一下? |
23
securityCoding 2021-03-31 08:58:17 +08:00
1. 先用 fio 测试下磁盘 iops,修改 mysql 设置
2. uuid 做主键要不得,会触发页分裂,io 次数会增加很多 |