一、数据库瓶颈
无论是 IO 瓶颈还是 CPU 瓶颈,最终都会导致数据库活跃连接数激增,逼近甚至触及承载阈值。从业务服务视角看,这意味着可用连接数锐减甚至耗尽,进而引发并发能力受限、吞吐量下降乃至服务崩溃。
1. IO 瓶颈
首先是磁盘读 IO 瓶颈。当热点数据过多超出缓存容量时,频繁的物理 IO 会显著拖慢查询速度,此时适合采用分库或垂直分表策略。
其次是网络 IO 瓶颈。若单次请求数据量过大导致带宽不足,分库是更直接的解决方案。
2. CPU 瓶颈
SQL 执行效率低下也是常见原因。例如包含 JOIN、GROUP BY、ORDER BY 或使用非索引字段查询,都会增加 CPU 运算负担。应对方式包括 SQL 优化、建立合适索引,或将部分计算下沉至业务层。
单表数据量过大导致全表扫描行数过多,也会让 CPU 成为瓶颈,此时应考虑水平分表。
二、分库分表
1. 水平分库
**概念:**以字段为依据,按照一定策略(hash、range 等),将一个库中的数据拆分到多个库中。
结果:
- 每个库的结构都一样;
- 每个库的数据都不一样,没有交集;
- 所有库的并集是全量数据。
**场景:**系统绝对并发量上来,单纯分表难以从根本上解决问题时,可考虑水平分库。


