V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fengya68
V2EX  ›  程序员

mysql 单表即将上 2 千万数据 存授权的 性能跟不上了 怎么优化

  •  
  •   fengya68 · 2020-05-08 18:23:30 +08:00 · 5806 次点击
    这是一个创建于 1658 天前的主题,其中的信息可能已经有所发展或是发生改变。

    存商品授权的 每个门店对应每个商品的授权 现在有 8000 多商品 7000 多家门店 目前已经有 1800 多万条数据了 要怎么破 即将到性能瓶颈了

    43 条回复    2020-05-10 14:20:44 +08:00
    zoharSoul
        1
    zoharSoul  
       2020-05-08 18:26:18 +08:00
    加钱呗
    阿里云 rds 4c8g 的我试过单表 2 亿多数据,
    单表查询没啥压力
    cominghome
        2
    cominghome  
       2020-05-08 19:49:44 +08:00
    @zoharSoul 4c8g 能搞 2 亿行?这么猛的吗?还是说字段少?
    Nitromethane
        3
    Nitromethane  
       2020-05-08 20:03:13 +08:00
    数据同步到 ES 一份,读请求走 ES ;
    peyppicp
        4
    peyppicp  
       2020-05-08 20:08:40 +08:00
    按照门店 id 分库分表,水平拆分到 101 个库里,表变为逻辑表,单表 18w 数据
    wqhui
        5
    wqhui  
       2020-05-08 20:19:54 +08:00
    分表呗,读频繁的话就做主从读写分离或者用缓存
    opengps
        6
    opengps  
       2020-05-08 20:39:56 +08:00 via Android
    表分区,分表,分库,集群
    就这么个优化路线
    sagaxu
        7
    sagaxu  
       2020-05-08 20:41:40 +08:00 via Android
    才 2000 万就慢,分表没用
    CStarter
        8
    CStarter  
       2020-05-08 23:36:48 +08:00
    @peyppicp 101 个库?
    vinsa
        9
    vinsa  
       2020-05-09 01:16:05 +08:00
    才 2KW 数据怕啥,分个区就好了,还能上个 10 倍,主键查询瞬回。
    sonxzjw
        10
    sonxzjw  
       2020-05-09 08:15:55 +08:00
    简单,分表分库
    yc8332
        11
    yc8332  
       2020-05-09 08:48:19 +08:00
    这种东西存下来后面不都是走缓存的吗
    pmispig
        12
    pmispig  
       2020-05-09 09:12:09 +08:00
    上 ssd,上好的 ssd,换 cpu 换主频高的 cpu
    fareware
        13
    fareware  
       2020-05-09 09:34:08 +08:00
    2kw 慢不是硬件或者设计问题吗?
    mymike
        14
    mymike  
       2020-05-09 09:56:25 +08:00
    根本没必要分库分表 ES,硬件性能与配置可能需要调整下,其实单机上亿没有丝毫问题
    fengya68
        15
    fengya68  
    OP
       2020-05-09 10:12:44 +08:00
    @zoharSoul 有道理 现在表结构是 MyIsam 有必要转 InnoDb 吗
    fengya68
        16
    fengya68  
    OP
       2020-05-09 10:14:19 +08:00
    @mymike 商城类就怕延迟高,现在有时候就会卡一下 看来优化还有很长的一段路
    zoharSoul
        17
    zoharSoul  
       2020-05-09 10:14:47 +08:00
    @fengya68
    看你查询逻辑了.
    一般来说可以转
    zoharSoul
        18
    zoharSoul  
       2020-05-09 10:16:35 +08:00   ❤️ 1
    @cominghome 字段比较少就 10 多个吧.
    合理的索引 + 相对简单的查询..
    现在 mysql 的性能超乎你的想象...

    别听那些讲面试的瞎几把扯淡,几百万就分库分表很多时候是纯粹给自己加戏.
    encro
        19
    encro  
       2020-05-09 10:19:16 +08:00
    所有的 mysql 慢问题的三个常规操作:
    1,慢日志;
    2,慢日志分析工具;
    3,explain ;
    kiddult
        20
    kiddult  
       2020-05-09 10:21:59 +08:00
    @fengya68 卡一下多半和 mysql 没啥关系,查一下慢日志,100%有人查询没走索引瞎操作了
    xuanbg
        21
    xuanbg  
       2020-05-09 10:22:43 +08:00
    难道每个门店都是专有的商品?看着也不像啊,1700 门店才 8000 种。应该是大部分商品所有门店都有,小部分商品某些门店专有吧?

    如果这样的话,可以给权限分级别啊。譬如分为:公共、分组、门店这么几个级别。公共的就是所有门店都能访问;分组的就是要有组权限的才能访问,组权限就是给门店分组,按分组授权;门店的就是指定门店才能访问,和你现在的做法一个样。这样你的权限关系表就能缩减几百倍的数据。我估计有个几万行就足够了。
    leonidas
        22
    leonidas  
       2020-05-09 10:30:05 +08:00
    常规操作索引优化 长远考虑还是的话水平拆分吧
    encro
        23
    encro  
       2020-05-09 10:44:32 +08:00   ❤️ 1
    @xuanbg

    分权不如直接店铺对商品快。因为还有排序等附加信息吧。

    这里面其实是主表要做好,主表只能是关联表。。

    select p.name from shop_product sp, product p where sp.shop_id=xxx and sp.product_id=p.id limit 100;

    如果 sp 的 shop_id 建立了索引,那么几千万数据,还是毫秒级的。

    什么?还在用 MyIsam ?难道非常享受断电之后 repair 的过程?
    encro
        24
    encro  
       2020-05-09 10:49:48 +08:00
    @zoharSoul

    阿里云上数据库,最低配置一年 2 千那种,最大的表存着 2 亿,感觉还可以拼一拼。
    Michaelssss
        25
    Michaelssss  
       2020-05-09 11:11:21 +08:00
    单表也就 2GB 左右大小把。。都 0202 年了,MySQL 已经不是你想的那种弱鸡了
    realpg
        26
    realpg  
       2020-05-09 11:16:53 +08:00
    垃圾服务器,单表 4200 万无性能压力啊
    还是执行有问题
    realpg
        27
    realpg  
       2020-05-09 11:18:48 +08:00
    @cominghome #2
    查询都简单化,很容易 handle
    你天天全是复杂到吓死人的查询,恨不得八个表 full join 那肯定不行

    主要还是表结构 查询设计
    gemini767
        28
    gemini767  
       2020-05-09 11:42:22 +08:00
    @zoharSoul 百万数据分库分表确实加戏,但是上亿数据单表查询也是牛了。。个人经验千万数据业务稍微复杂,rt 抖动的就非常大了,生产风险很大。
    ylsc633
        29
    ylsc633  
       2020-05-09 12:09:20 +08:00
    2kw 就瓶颈了......

    肯定是你索引建的不对或者 sql 写的有问题!
    collery
        30
    collery  
       2020-05-09 13:49:05 +08:00
    不仅要看行数,还得看数据量大小了
    xcstream
        31
    xcstream  
       2020-05-09 13:55:46 +08:00
    查询方式有问题吧 可以先查 id 再 id 查数据
    Evilk
        32
    Evilk  
       2020-05-09 15:07:15 +08:00
    @Michaelssss 是的,我们最近才升级了 MySQL8.0,而且现在硬件性能已经很好了
    Erroad
        33
    Erroad  
       2020-05-09 15:12:08 +08:00
    2kw 慢不是单表的原因了
    fengya68
        34
    fengya68  
    OP
       2020-05-09 17:18:57 +08:00
    @xuanbg 每个门店 对应每个商品价格都不同 所以大区 区域 站点 门店 都是一个授权的过程
    kiddingU
        35
    kiddingU  
       2020-05-09 17:28:38 +08:00
    1 、分表分库
    2 、优化查询
    3 、查询可以走 ES
    gaocheng
        36
    gaocheng  
       2020-05-09 17:39:57 +08:00
    没有什么事情是钱解决不了的,如果还是解决不了就是钱没花到位无论是请人还是买设备买服务
    ccnccy
        37
    ccnccy  
       2020-05-09 18:05:13 +08:00 via iPhone
    没索引吧,有的话,应该不会太慢。
    fengya68
        38
    fengya68  
    OP
       2020-05-09 18:55:24 +08:00
    慢日志高于 0.1 秒的没有,并发一上来 还是会导致卡顿的,还是得好好排查下其他问题
    fengya68
        39
    fengya68  
    OP
       2020-05-09 19:11:35 +08:00
    @realpg 阿里云通用服务器 8 核 16g cpu 没满过 就是偶然会卡一下 阿里云的服务器还是可以的 慢日志也没有 设置 0.1 秒
    shenjixiang
        40
    shenjixiang  
       2020-05-09 20:14:58 +08:00
    数据量大了最好优化下 mysql 的默认配置,可以按门店 id 做做表分区
    zhuweiyou
        41
    zhuweiyou  
       2020-05-09 21:52:56 +08:00
    应该是没索引
    qbmiller
        42
    qbmiller  
       2020-05-10 08:40:27 +08:00 via iPhone
    @zoharSoul 没毛病,阿里后台可能大数据性质的 MySQL
    yukiloh
        43
    yukiloh  
       2020-05-10 14:20:44 +08:00 via Android
    去年看到别人评价数据库说两千万是瓶颈
    现在直接两个亿,这么给力的吗…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1258 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 111ms · UTC 17:55 · PVG 01:55 · LAX 09:55 · JFK 12:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.