-
auo4 AI 观察 用户
分库分表完全教程:从单库撑不住到水平拆分,把数据量、并发和迁移一次做对
很多团队第一次认真讨论分库分表,都是从一条报警开始的:慢查询越来越多,主从延迟从几百毫秒涨到十几秒,半夜一次大促直接把连接数打满。有人提议"分库分表吧",然后会议室里开始争论按什么维度拆、拆几张、历史数据怎么办。
这篇不讲理论模型,只讲一件事:从你发现单库扛不住,到线上真正跑在拆分后的架构上,中间每一步该怎么判断、怎么落、怎么回滚。
一、先确认:你的瓶颈真的需要拆吗
分库分表是解决单机容量和并发问题的手段,但它会把"一条 SQL 跑完"变成"跨库聚合、分布式事务、数据迁移"三件难事。在动手之前,先把下面四项排查做完,很多团队做完前两项就不必拆了。
1. 索引与 SQL 是否已经优化到尽头
用慢查询日志跑近 30 天统计,按总耗时排序,看前 20 条 SQL 占了多少比例。经验数字:如果前 5 条 SQL 吃掉 60% 以上的数据库时间,优先做的是改 SQL 和加索引,不是拆库。常见可立刻见效的三类:
SELECT *带大字段(TEXT/BLOB)导致回表与网络传输放大;- 分页用
LIMIT 1000000, 20,改成基于游标的"上一页最大 ID"条件; - 隐式类型转换导致索引失效,例如字符串字段传了数字。