V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
bthulu
V2EX  ›  MySQL

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

  •  
  •   bthulu · 119 天前 · 2081 次点击
    这是一个创建于 119 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    如果你看 1t 以上的容量好像很便宜就买了, 那大概率买到叠瓦...
    exploreexe
        21
    exploreexe   118 天前
    手里的两块红盘刚报废,以后再也不会买西数的硬盘了,是真的垃圾。
    wmjie
        22
    wmjie   118 天前
    1. 建议不要用 uuid 做主键。
    2. ecs 的用的哪个盘不重要,重要的是他是直接落盘了,还是会进行了特殊的调优:比如在内存缓存了一下?
    securityCoding
        23
    securityCoding   118 天前
    1. 先用 fio 测试下磁盘 iops,修改 mysql 设置
    2. uuid 做主键要不得,会触发页分裂,io 次数会增加很多
    yc8332
        24
    yc8332   118 天前
    @bthulu 云主机不是一块硬盘。。都是磁盘阵列,可能还是 ssd 。。他们的 io 都是优化过的。速度肯定比你单盘快
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2375 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 12:30 · PVG 20:30 · LAX 05:30 · JFK 08:30
    ♥ Do have faith in what you're doing.