• 请不要在回答技术问题时复制粘贴 AI 生成的内容
summertimesad
V2EX  ›  程序员

2026 年了,还有老架构坚持 MySQL 单表数据不能超过 2000 万行

  •  
  •   summertimesad · Oct 13 · 9143 views
    问他为什么,张口闭口就是:“单表过 2000 万,B+ 树就从 3 层变成 4 层了,多一层就多一次磁盘 I/O ,多的我不想说了 你自己问 AI”

    我寻思现在生产环境服务器 256G 内存,给 Buffer Pool 分 200G 。

    Buffer Pool 看着 200G 空间表示:“我管你这那的,非叶子节点全都给我常驻内存!多出来的一层不过是几十纳秒的内存二分查找,哪来的这么多废话”

    业务场景如果是因为备份恢复 SLA 扛不住、在线 DDL 风险大、或者热数据 Working Set 超出内存导致离散回表击穿,那该分分、该归档归档,这叫架构治理;
    但如果不看硬件规格和查询场景,纯拿“B+ 树长到 4 层就会性能崩塌”当圣经到处念咒,AI 的回复直接输出本帖
    Supplement 1  ·  Oct 13
    关于 256G 机器“性价比”的:
    这台是公司自建云物理机,前阵子老库故障紧急顶上去的,之前生产环境是 64G 的虚拟机。

    就算是 64G 内存的数据库,4 层的目录页顶多几个 G ,早就全在内存里了,对比 3 层多出来的只是 CPU 几十纳秒的内存寻址而已。

    吐槽的初衷是:现在都什么年代了,系统架构什么都不管,直接奉为圭臬“2000 万行是 B+ 树的性能死线”,让我对抱残守缺的老教条有种无力感。
    Supplement 2  ·  Oct 14
    感谢大家的回复,只是有些 V 友的关注点都在 256G 内存上了,是我举例有问题。
    我原本是希望大家讨论 2000 万行的事儿,重点不在内存上啊
    86 replies  •  2026-10-15 09:05:20 +08:00
    liaohongxing
    1
    256G 内存不现实,大部分就部署在阿里云这类云平台,你看下 256G 内存多少钱?
    OctopusGO
    OctopusGO
    Oct 13
    2
    是的 我们的高配数据库 单表已经 200G 了 一点问题没有 大概五六亿的数据
    bbao
    bbao
    Oct 13
    3
    服务器 256G 内存,你花钱买么?哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
    JeffWalker
    4
    有人知道 256g 的内存要多少钱吗
    wudaye
    wudaye
    Oct 13❤️1
    5
    @bbao 去年涨价前 256G 服务器内存也没多少钱
    seedhk
    seedhk
    Oct 13
    6
    阿里云上,对大公司来说 256g 没什么。对小公司来说,从 2g 升到 8g 都要思考一下
    bbao
    bbao
    Oct 13
    7
    @wudaye 贵司目前服务器以及 mysql 的配置是怎样的?刚查询阿里云最高 ecs104G ; mysql 高可用型号最高 128G (单价 12.8W/月);其他型号没有超过 64G 的;

    所以你们的 256G 内存是怎么来的?没多少钱是多少钱?
    ntdll
    ntdll
    Oct 13❤️1
    8
    @seedhk >> 从 2g 升到 8g 都要思考一下

    这可能是真的有点小了,家庭作坊,出来做生意也不至于差一个月这几百块钱的差价。
    526457385
    526457385
    Oct 13
    9
    你给他整一个超过 2000w 的表并且没有什么问题的 甩过去就行了,其他废话不要多说
    tutusolo
    tutusolo
    Oct 13❤️1
    10
    你要不要先想想你在说什么,256g 内存的服务器去解决 mysql 单表 2000 万的问题,你可真是人才。
    gfreezy
    gfreezy
    Oct 13
    11
    一般云厂商都有物理机的,1T 内存都有
    nunterr
    nunterr
    Oct 13
    12
    我们公司的一个订单表单表数据已经快 2 亿了,还改不了😂,就这样持续增加中,系统还很稳定
    azkaban
    azkaban
    Oct 13
    13
    你用这个钱用啥都行啊,直接云厂商的商用数据库,全进内存都行
    maocat
    maocat
    Oct 13
    14
    你想尽办法优化的 SQL 不如给服务器的磁盘换成 SSD
    JYii
    JYii
    Oct 13
    15
    @ntdll #8 集团利润高的时候,你想升级什么都是一路畅通。这两年再提 OA ,部门领导就给退回了,理由是经费不足
    fionasit007
    16
    @ntdll #8 我们公司产品日活百万,但是服务器数据库大多数都是 1h1g 的,少数撑死 8h8g ,不过我们产品主要是客户端功能居多,服务器交互少,很多服务我们都是 1h1g 起步不够在加
    adoal
    adoal
    Oct 13❤️1
    17
    OP 有一种经济上行期的美感
    winnerczwx
    winnerczwx
    Oct 13❤️1
    18
    @JYii 一个月几百块钱经费都不足可以直接申请破产了吧, 2g 升 8g 一个月可能都用不到几百块
    refear99
    refear99
    Oct 13
    19
    阿里云 polarDB 和类似产品,单表 20 亿都不是问题
    cslive
    cslive
    Oct 13
    20
    现在都是集群,没有单机了
    ShinichiYao
    21
    看了一眼,1 亿多点吧,内存 8G
    Sezxy
    Sezxy
    Oct 13
    22
    我寻思之力发动
    Zhuzhuchenyan
    23
    这个论断在现在的硬件平台确实不适用了
    从存储的角度来说,自从我们托管的机器换了 NVME ,面对 10000 倍性能提升的 4K 随机读,和 1000 倍性能提升的 4K 随机写,感受到的差异是巨大的
    JYii
    JYii
    Oct 13
    24
    @winnerczwx #18 有没有可能不是一台,1 主 N 从。还有没有可能下个季度部门预算已经花完了。

    问题的点不在于几百块还是几千几万,是当下"开源节流"
    junkk
    junkk
    Oct 13
    25
    检测不能超过不重要,但机器性能有限的情况下,2kw 确实是一道坎,当然可能也不一定,不过八股文答案就是这个,别人问了你说加钱加机器,那很可能就挂了
    OctopusGO
    OctopusGO
    Oct 13
    26
    @nunterr 这才哪到那 我们都快十亿了
    skuuhui
    skuuhui
    Oct 13
    27
    我更建议你自己问一下 ai
    cvbnt
    cvbnt
    Oct 13
    28
    实际 B+树高度可以通过工具或 page 分析看,索引合理+Buffer Pool 够用+查询写法正确,2000 万远远不是上限
    lxc404
    lxc404
    Oct 13
    29
    反驳不能超过 2000 万行的理由可以有很多,但不该是 256G 内存
    你们生产服 mysql 就一个节点?不做灾备?十几台机器都给升到 256G 就为了单表超过 2000w?
    selfly
    selfly
    Oct 13
    30
    @OctopusGO mysql 单表十亿?有对接前端精确查及分页查功能吗,如果有且速度在 ms 级确实牛,如果只是做历史库没啥参考性
    OctopusGO
    OctopusGO
    Oct 13
    31
    @selfly 有精确查找 但是都有时间范围的查询 分业也都有时间范围 而且做了分区
    kandaakihito
    32
    看具体的表结构和业务吧,之前见过最牛逼的一种玩法:弄个字段存 json ,json 还贼大,然后每次查询都是全表加载 json 到内存搜索

    磁盘都给擦出火星子了
    MoozLee
    MoozLee
    Oct 13
    33
    加钱能解决 99%的业务问题,但是最大的问题是不能加钱啊
    XProxyAi
    XProxyAi
    Oct 13
    34
    你这个是政治问题,不是技术问题,关键是话语权掌握在谁手里,2000 万这个东西就是一个经验值,根据不同情况肯定是有变化的,但是你挡不住 话语权掌握在老古董跟傻逼手里
    lscho
    lscho
    Oct 13❤️1
    35
    2026 还有坚持用 mysql 的呢
    alsas
    alsas
    Oct 13
    36
    有一种经济上行期的天真
    8355
    8355
    Oct 13
    37
    20 亿
    pulutom40
    pulutom40
    Oct 13
    38
    好奇楼上都是些什么公司,做的都是些什么项目?数据库 256G 内存难道很高吗?

    数据库的内存,不都是用 T 做单位的吗?单机 256G 不就常规水平吗?
    lujiaosama
    39
    @pulutom40 几十 W 的小破项目,你想上 256G 的内存,甲方都得嘀咕半天。给你上个 32G,64G 就不错了。
    JacakSweet
    40
    有个表 6 亿数据了
    cccssss
    cccssss
    Oct 13
    41
    @pulutom40 你最好说的是内存,不是硬盘
    momo1pm
    momo1pm
    Oct 13
    42
    @pulutom40 公司预算就算没问题,也不会为了某个开发某个无关紧要需求去多花钱
    opengps
    opengps
    Oct 13
    43
    建议实测后再出结论,因为实际业务上反正要分表了,不如多分几个效果好,所以定一个数值不要单表超过,这并不是否认
    FlashEcho
    FlashEcho
    Oct 13
    44
    不知道为什么大家都觉得数据库实例节点服务器配 256G 内存很少见,这种规格的机器已经非常普遍啊
    opengps
    opengps
    Oct 13
    45
    @FlashEcho #44 为了避免各种单点瓶颈,早就拆分成多台低配集群方案了
    pulutom40
    pulutom40
    Oct 13
    46
    @cccssss 是内存啊。数据库这种系统,内存直接影响核心性能,核心业务都是直接拉满的。
    pulutom40
    pulutom40
    Oct 13❤️1
    47
    楼主的说法我是认同的,现在的硬件和以前完全不一样了。nvme 固态+高内存服务器,2000w 数据都不够热身的。而且就算单表膨胀上天了,现在也有很多业务无感的解决方案。死守 2000w 这种傻逼值,纯属八股文背多了。
    nrtEBH
    nrtEBH
    Oct 13
    48
    这种人被裁员了是一点都不冤的
    xenme
    xenme
    Oct 13 via iPhone
    49
    20 亿的表,512G 内存很常见,前段时间有一个短时间扩到了 192 核/1.5T 内存( aws r7i.48xlarge )

    大部分情况堆硬件就能解决,最快的方式
    superjojo
    superjojo
    Oct 13
    50
    我一个 8G 服务器,自建的 mysql ,占了 3.4G 左右,都单表一千多万了,正常运行,我是移动端出身,后端随便糊的。
    alamaya
    alamaya
    Oct 13
    51
    不知道为啥上面这么多人对 256g 内存这么应激的,也就这几年内存贵了,前几年 1t 内存都稀松平常
    felixcode
    felixcode
    PRO
    Oct 13
    52
    20 年前学的东西指望用到退休呢
    hutoer
    hutoer
    Oct 13❤️1
    53
    @alamaya 前几年给一些甲方(国企)配过服务器,256G 内存服务器,他们都开会了好几次。服务器内存比台机贵好几倍,不便宜的。不是所有的企业都是阿里、华为这种不差钱的主。而且前几年,服务器内存一般单条是 16G ,1T 要 64 条了,哪里会稀松平常。
    displayabc
    54
    @bbao #7
    xiuming
    xiuming
    Oct 13
    55
    4 层 对 SSD 来说压力还好吧 不像以前 HDD 时代
    diudiuu
    diudiuu
    Oct 13❤️1
    56
    @pulutom40 #46 长这么大了,最多一次一次性启动 8 台 8h16g 的数据库,读写分离,也就是开了一周,就又自动退回去了,你确定是内存?
    JasonYip
    JasonYip
    Oct 13
    57
    有的单位自己部署的云主机确实一台就是内存 256GB-1TB 都有的
    heimoshuiyu
    58
    600 块一根 ddr4 ecc 32G 内存,256G 也就 4800
    为啥数据库服务器非得上云,一年的租金都够买几十套这配置了
    weiqipeng
    weiqipeng
    Oct 14 via iPhone
    59
    plasticee
    plasticee
    Oct 14
    60
    @OctopusGO 单表 200G ,是 mysql 数据库?
    plasticee
    plasticee
    Oct 14
    61
    @nunterr 用的是 mysql 数据库?
    kkwa56188
    kkwa56188
    Oct 14
    62
    都 2026 年了, OP 思维还停留在经济上行期吗?
    luojiedev
    luojiedev
    Oct 14 via iPhone
    63
    @tutusolo op 应该只是用这个举例,跟我一样不太会表达。

    哈哈,被人喷多了,慢慢就学会了。
    sampeng
    sampeng
    Oct 14 via iPhone
    64
    那是,首先要看看业务支撑了,2000 万记录上 256G 的内存数据库。嗯,业务如果几十亿上百亿营收还行,我个人觉得亿级别一下,那就是钱多的没地方花。
    qwer666df
    qwer666df
    Oct 14
    65
    @pulutom40 #38 T 单位内存 云厂商都没有, 你们公司做的项目难道是类似于 12306 并且是自建数据库吗
    OctopusGO
    OctopusGO
    Oct 14
    66
    @plasticee #60 是的
    xiaoxiaodong
    67
    @qwer666df 不知道楼上是什么公司,据我所知美团。字节一般都没有 1T 内存的机器,我理解 12306 也不可能上 1T 的内存
    senooo
    senooo
    Oct 14
    68
    @xiaoxiaodong 我们测试服务器内存都是 512GB 的。没错 不要给我纠正是硬盘,是内存
    capric
    capric
    Oct 14
    69
    @xiaoxiaodong 在 2018 年公司服务器都一堆 256G 的了
    qbqbqbqb
    qbqbqbqb
    Oct 14
    70
    @qwer666df 不是所有项目都是全量上云的,很多传统项目,都是自有机房承载核心业务逻辑(什么算核心业务逻辑,主要是涉及重要业务数据处理和持久化的,尤其是持久化部分会特别重视,有些场景下甚至会用独立物理机专门承载数据库服务器,不放进 k8s 等常规业务节点的运维体系里),云上只放特定功能的边缘节点。
    songche
    songche
    Oct 14
    71
    @liaohongxing 我在央子,用的机器还真都是 96 核 256G 内存 40T 存储的机器,用不上面试时候准备的各种调优手段,不过最近新申请机器就不是很容易到达这种配置了。
    kuxuan
    kuxuan
    Oct 14
    72
    我 4G 大的内存小鸡,单表 400 万条,大吗?
    qbqbqbqb
    qbqbqbqb
    Oct 14
    73
    @xiaoxiaodong 不能拿这种大型 toC 互联网产品的方案来解释一切,很多其它类型的项目根本不走互联网的云原生、微服务的逻辑,走的是将原有的巨型单体应用粗粒度模块化拆分+集群化部署的伸缩方式:
    - 集群中的每个业务节点运行完整的单体应用,只是会根据当前服务器角色只运行对应的业务逻辑
    - 数据库也是集中式的,不会根据业务模块拆分不同的库,只做 sharding (通常意义上的分库分表)

    他们会需要这种高配单机。
    alamaya
    alamaya
    Oct 14
    74
    不知道上面的拿什么高可用云服务的东西来说事儿啊,建议了解下自建机房或者自托管的企业,当然还是要有点实力的企业才行。
    国内的 idc 我不了解,不过国外的 idc 比如各位翻墙买的各种 vps ,为了一台机器多切点,单机内存都是 512 起步的,国外有 idc 出租独服的,就去年看到一家 768g 内存的 epyc 做活动的时候月租好像就 700 多刀,没大伙想的那么高不可攀
    tf2
    tf2
    Oct 14
    75
    现在都什么年代了,系统架构什么都不管,直接奉为圭臬“2000 万行是 B+ 树的性能死线”


    因为你拉屎很爽,如果爆慢查询了,擦屁股的是 老架构 啊。
    iyaozhen
    iyaozhen
    Oct 14
    76
    100+GB 内存物理机我还真用过,搭配 SSD 那真的是太顺畅了。也是跑 MySQL ,确实快很多
    martinm
    martinm
    Oct 14 via Android
    77
    我司 的 物理服务器,托管在机房,服务器内存 192G ,大家可能习惯云服务器小内存了
    ChovyChu
    ChovyChu
    Oct 14
    78
    借题吐槽一下,其实只要有大数据相关的服务,一般资源(内存)还是非常好深情的。比如以前某甲方石油项目,当时发现 hive 每隔十几天就会重启,导致一些任务异常,排查下来发现 3 个 hive 节点在 3 台物理机上,每台内存没记错应该是 300 个 G 左右,每天内存就会上涨 10 个 G 左右,最后排查出来是一个内存泄漏的问题,实际上根本用不到这么大的内存。
    还有就是某航空公司项目,前期大数据调研的时候申请了一批资源( CPU+内存),结果实际项目上后使用率超级低,于是只能空跑,来把利用率提上去-_-
    seenthewind
    79
    看是什么场景吧

    如果是数据仓库之类的,几千万洒洒水,DBA 去处理吧。

    如果是高频的数据库、表,超过一千万我就准备拆了。
    8ejTFevn
    8ejTFevn
    Oct 14
    80
    我们这里几亿数据的表不少
    xiaoxiaodong
    81
    @qbqbqbqb #73 这个也是,好久没有接触过这种项目了 ,受教了
    jischeng
    jischeng
    Oct 14
    82
    在互联网厂商做过一段时间 db 内核/运维,数据库团队一般会有一些大内存版本的服务器(双 numa 机器,单 numa 36cu,500GB 内存,cu:内存约 1:12.5)单机器月成本在 1-2k rmb;
    针对一些自研的数据库,或是存算分离的数据库,大部分类 b+树结构只有 2 层(root page + leaf page),普通的窄表/关系表基本是全部放在内存中。
    内存一般不是瓶颈,更多的压力在计算/吞吐。
    qf19910623
    83
    真有钱,我工作十几年,经历过的生产环境最大内存也就 64G
    trzzzz
    trzzzz
    Oct 14
    84
    @qf19910623 #83 之前给电信部署的时候物理机 800GB 内存
    muyiluop
    muyiluop
    Oct 15
    85
    回想我 10 年在小公司的开发经历,从未打过这样的富裕的账,我用过的数据库服务器最多也才 32G 内存。还得是大厂啊。关于 2000 万行这个,对于一些记录表,我也是分表的,每月一张表,这样方便进行备份。不过现在数据库原生支持分区了,不分表我估计也没问题,完全是我懒得去研究了,直接分表省事。我之前 1 个多亿记录的表,备份后单表 300GB ,能想象我们 10M 宽带的服务器备份这个到内网的存储来要多久么。唉,还得是大厂,有钱的公司啊,直接云数据库算了。
    muyiluop
    muyiluop
    Oct 15
    86
    @senooo 羡慕坏了,从未有过如此富裕过。一直都是小公司和创业公司,测试服务器顶多也只给 16g
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1976 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 177ms · UTC 15:15 · PVG 23:15 · LAX 07:15 · JFK 10:15
    ♥ Do have faith in what you're doing.