mysql的单表多大要考虑分库分表

一、问题背景

第一个问题,mysql的话,一般单表行数达到多少性能会开始明显下降,然后一般推荐单表行数到多少建议做分库分表呢;第二个问题,mysql的单库最大可支持的qps是多少,一般qps到了多少之后,会推荐进行分库呢

 

二、问题分析

1. 单表行数多少开始明显下降?

  • 官方理论

    • InnoDB 本质上可以支撑 亿级行数(单表 10 亿行甚至更多,取决于存储和索引设计)。

    • MySQL 官方 InnoDB 限制 并没有给出硬性“最大行数”,而是说由 页大小、索引树高度、磁盘空间 决定。

    • 阿里的开发手册中有条建议,单表行数超500万行或者单表容量超过2GB,就推荐分库分表
  • 实践经验(互联网公司)

    • 千万级行数以内(1,000 万–5,000 万):只要索引合理,性能基本稳定。

    • 过亿行:查询/更新延迟会开始明显上升(B+ 树层级增加、缓存命中率下降、主从复制压力大)。

    • 正常是应该像阿里这样的,然而理想和实现总是有差距的,阿里这种体量的公司不差钱当然可以这么用,实际上很多公司单表数据几千万、亿级别仍然不选择分库分表。
    • 电商/支付系统常规推荐

      • 单表 <5,000 万 行是安全区。

      • 接近 1 亿行时,通常会提前分表。


2. 单库最大可支持的 QPS?

  • 官方角度

  • 实践经验(单机 MySQL 8.0 + InnoDB,SSD 环境)

    • 读为主(主从架构 + 只读从库):单库 QPS 可达 5 万–10 万

    • 写为主(事务型,电商/支付常见):单库 QPS 通常在 2 千–5 千 区间更稳健。

    • 峰值案例

      • 阿里双 11:单库写 QPS 稳定在 3 千–5 千,读 QPS 借助读写分离 + 缓存可以到 10 万。

      • PayPal/Stripe:支付交易库单实例写 QPS 通常不超过 2 千–3 千,超过就会水平拆分。

  • 常见分库阈值

    • 写 QPS > 3 千–5 千 → 考虑分库分表。

    • 存储容量 > 200GB/单库单表 > 5,000 万行 → 也会触发拆分。


3. 官方文档 & 实际案例


总结

  1. 单表行数:<5000 万推荐,过亿要分表。

  2. 单库 QPS:写 3000–5000 是常见上限,读 5 万–10 万。

  3. 触发拆分条件

    • 单表 >5000 万行

    • 单库存储 >200GB

    • 写 QPS >3000–5000


 

 

posted @ 2025-09-27 22:41  Boblim  阅读(74)  评论(0)    收藏  举报