连载中 18/20

分片治理:水位、倾斜与再平衡

2026-07-27 · 3436 阅读 · 0 评论 · 0 赞

拆完之后,治理开始

系列的工程主线到这里基本走完:拆分、路由、查询、事务、主键、扩容、迁移、DDL、归档。本篇讲最后一个工程话题,也是唯一一个「没有终点」的话题——治理。分库分表把一个数据库变成几十个,运维对象翻了数十倍,过去「看一下库的整体水位」的动作,现在变成了「看几十个库的水位分布」。治理的核心就三件事:水位看得见、倾斜治得了、容量算得准。

水位:把每片都变透明

治理的第一步是把分片级别的指标看板建起来,逐分片采集四类数据:容量——磁盘水位、行数、增长率;性能——QPS、RT、慢查询数量;资源——CPU、内存、Buffer Pool 命中率、连接数;延迟——主从延迟、双写同步延迟。关键是按分片切片展示加全局排序:一眼看出「哪片最热、哪片最满」,而不是只看平均值——平均值是分片系统的谎言,它把倾斜藏得严严实实。告警阈值按「分片最差值」设,不是按均值设。

倾斜:不均匀的三种来源

明明取模分片,为什么有的片胖有的片瘦?倾斜三个来源,对策各异。自然波动——Hash 分片也会有大数定律之外的随机偏差,偏差在正负两成内属正常,不管;业务热点——某个超大商户、某个爆款用户的写读集中在一个分片,这是设计期没防住的(分片键的取值分布没摸清),短期用查表法定向路由到独立分片(第 4 篇的混用刀法),长期看要不要为它单独立「专属租户」架构;分片键缺陷——键的哈希分布本身不均(比如键值带规律性前缀),这要改分片算法,代价直逼一次全量迁移,靠预分片槽位重映射来消化(第 13 篇的价值在这里兑现)。

容量规划:按三年算,留余量

分片数的规划公式不复杂,难在参数要诚实:目标分片数 = 三年后的总行数 ÷ 单表理想行数(千万级),再向上取成 2 的幂(为翻倍扩容留路)。参数里最容易骗自己的是增长率——用过去一年的真实增速外推,别拍脑袋。算出来是 40 就上 64 片,算出来是 500 就认真考虑 1024 槽预分片。宁多勿少:分片多了的代价是运维复杂度线性涨,分片少了的代价是一次大迁移——后者的痛远大于前者。水位到了七成就要启动扩容评估(老规矩:maxmemory 七成的同款哲学),别等九成才动。

治理例会与自动化

把治理做成机制而不是口号:月度水位盘查——逐分片过一遍容量与增速,超阈值的进扩容评估;季度倾斜审计——行数 Top 与 QPS Top 的分片各拉出来归因;自动化兜底——水位、倾斜、慢查询的采集入监控平台,阈值触发自动工单。治理的成熟度标志不是「问题为零」,是「问题从发现到处理有固定的流水线」。

工程篇章全部讲完。按系列惯例,接下来是踩坑实录——七个真实形态的分库分表事故,看看上面这些机制是怎么在实战里被绕过的。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#分片治理#容量水位#数据倾斜#再平衡#容量规划

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10101 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9873 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9294 阅读 · 21 评论 · 287 赞