ITPub博客

首页 > 数据库 > 国内数据库 > 分布式分片如何长期治理:阿里云 PolarDB-X 热点、扩容与全局索引实践

分布式分片如何长期治理:阿里云 PolarDB-X 热点、扩容与全局索引实践

原创 国内数据库 作者:数据Cool 时间:2026-11-12 17:03:44 0 删除 编辑

业务增长会让原本均匀的分片出现大租户、热点和跨分片查询,阿里云 PolarDB-X 推荐以 AUTO 在线重定义、GSI 和分区运维建立长期治理闭环;AUTO 自 5.4.13 引入,二级分区要求 5.4.17-16952556+。治理要让每次调整可观测,并经过资源评估、业务验证和回退演练。

治理总图:把分片当成持续变化的运行状态

生命周期

典型信号

PolarDB-X 治理动作

验收重点

建模

Top SQL 变化、键值倾斜、大租户出现

核对 AUTO/DRDS 模式,按谓词选择分区;主键拆分只作为默认起点

分区裁剪、分区行数、读写分布与 RT 基线

热点

单分区访问集中、最新区间过热

KEY 热点散列,或按条件执行 SPLIT PARTITION、 MOVE PARTITION

热点是否转移,Join 分区是否仍对齐

跨分片查询

非主分区键查询扫描多个分区

创建独立分区的显式 GSI,按需配置覆盖列

查询收益与存储、索引写维护成本

在线变更

分片键、表类型或索引不再适配

AUTO 在线重定义,配合 SHOW DDL、 PAUSE DDL、 CONTINUE DDL、 CANCEL DDL

DDL 进度、CPU/I/O/网络与业务延迟

扩容重分布

容量增长、节点间数据不均

Rebalance、分区迁移与数据均衡窗口

数据分布、资源消耗、扩容后的业务基线

建模阶段要保存的不只是 DDL,还包括高频谓词、键值基数、最大租户、时间区间增速、读写峰值和查询 RT。没有这些基线,后续很难区分“分片算法失效”和“业务访问形态已经改变”。

热点治理:先分清数据倾斜与访问热点

数据倾斜表现为某些分区行数或容量过大,访问热点则是请求集中,两者可能同时出现,也可能各自独立。单纯增加节点不会自动消除低基数键、大租户或最新时间区间的集中写入。

问题

合适的处理路径

需要守住的边界

KEY 分区出现热点值

使用 KEY 后续列进行热点散列,再观察请求分布

热点散列专题限定 KEY 分区,不能泛化到所有 HASH、RANGE

局部分区过大或过热

按条件使用 SPLIT PARTITION、 MERGE PARTITION、 MOVE PARTITION

分裂、迁移仍有数据移动和资源成本

RANGE/LIST 边界或枚举失配

使用相应 ADD/DROP/MODIFY/REORGANIZE 等操作

HASH、KEY 不支持像 RANGE/LIST 那样直接增删边界分区;LIST 的 MODIFY 是修改枚举集合

关联表分区不再对齐

在 TABLEGROUP 层同步执行相应变更

对齐有助于保持 Join 下推,变更后要重新验证执行路径

AUTO 的二级分区要求 5.4.17-16952556+;一级、二级各可使用七类策略,形成 49 种组合。组合数量不是目标,热点是否消失仍要靠数据验证。

实名案例:《香肠派对》在线补齐全局查询路径

真有趣开发、心动网络发行的《香肠派对》, user_focus 好友关系表超过百亿行。主表按 HASH(uid) 分区后,业务仍要按 focus_uid 查询;公开方案因此创建独立分区的 gsi_focus_uid,并在业务压测中在线创建 GSI、不锁表。

治理证据

案例结果

长期运行含义

主表与索引分工

uid 服务主表路由, focus_uid 服务 GSI 路由

新查询入口出现时,不必推翻原有主表分布

在线实施

案例描述业务压测期间在线创建 GSI、不锁表

在线变更可与验证衔接,但仍要观察回填资源

量化收益

该案例披露,百亿数据查询从 100 毫秒下降到 2 毫秒级,案例称 RT 提升 50 倍

数字仅属于该案例场景,不代表其他数据分布的必然收益

值得推荐的是“基线—在线建索引—混合读写验证”,而非只记录查询下降。索引上线后还要检查回表、写入维护和存储增量。

跨分片查询与 GSI:收益和成本一起管理

GSI 是可拥有独立分区键、独立数据分布的索引表,通过分布式事务保证主表与 GSI 强一致,创建、删除支持在线变更且无需锁表。 COVERING(...) 可在查询列被完整覆盖时减少回表, UNIQUE GLOBAL INDEX 用于全局唯一约束;普通本地唯一索引不能替代这一语义。

AUTO 与 DRDS 都能显式创建 GSI。前者使用 CREATE GLOBAL INDEX ... PARTITION BY HASH(...),后者使用 CREATE GLOBAL INDEX ... DBPARTITION BY HASH(...);DRDS 缺少的是未指定索引分区列时的默认自动索引列分区行为,两套语法不能交叉。GSI 适用于订单按用户、订单号双入口等多维等值查询场景;推荐把查询 RT、写入吞吐和空间占用放在同一轮压测中。

在线变更与扩容:不锁表不等于零消耗

AUTO 可通过 ALTER TABLE ... PARTITION BY ... 改分区键、策略或分区数,通过 ALTER TABLE ... BROADCAST 或 SINGLE 改表类型。广播表会在每个 DN 保留全量副本,SINGLE 则集中于一个 DN;两者互转或改为分区表时,要重新估算存储、写入和容量边界。

能力

版本前提

运行注意事项

AUTO 表类型及分区策略在线重定义

基础能力 5.4.13+;带 GSI 的分区表变更 5.4.14+

不阻塞 DML/SELECT,但可能全量迁移、回填和重分布,适合低峰执行

多个分区运维操作

5.4.14-16539836+;涉及二级分区为 5.4.17-16952556+

按表、全局索引或 TABLEGROUP 层级核对操作矩阵

Rebalance 分区均衡

V5.4.16、小版本 16717637(2022-12-27) 新增,扩缩容数据重分布时默认开启

扩容仍需搬迁数据,并关注迁移期间的 CPU、I/O

数据均衡运维窗口

企业版 5.4.18-17152226+

开始、结束参数默认均为 00:00,表示未设置窗口、任务持续执行;文档一般推荐窗口大于 5 小时,且长于单个子任务执行时间

扩缩容方面,AUTO 无停写阶段并允许其他 DDL;DRDS 有短暂停写且不允许其他 DDL。这个差别描述的是执行过程,不是性能零波动承诺。数据均衡会消耗 CPU、I/O,业务吞吐和延迟仍需在窗口内持续观测。

云贝案例提供了另一种治理样本:数千个商家、 50T 数据由一套数据库实例支撑,通过二级分区打散大商家热点,再用 Locality 将大商家分区放到独立存储节点,小商家共享资源。商家成长后可在线调整存储位置与分区数,仅影响被调整商家。这一规模属于该客户案例,不是单实例上限。

监控与回退:把每次变更当成一次发布

阶段

必查项目

处理动作

变更前

模式与精确版本、Top SQL、分区分布、GSI 清单、CPU/I/O/网络和 RT 基线

备份 DDL,明确验证 SQL、低峰窗口与退出条件

执行中

SHOW DDL 进度、回填量、业务错误、延迟和资源

必要时 PAUSE DDL,恢复用 CONTINUE DDL,终止用 CANCEL DDL

完成后

分区裁剪、回表、Join 下推、主表与 GSI 一致性、写放大

用原基线复测,确认热点没有转移到其他分区

回退

反向重定义或索引删除所需的数据移动、空间和时间

将回退也排入变更窗口,避免把它当成瞬时操作

这套闭环 适用于大租户成长、时间分区膨胀和查询维度增加场景。推荐为高风险变更保留一份可复演记录:原 DDL、目标 DDL、版本、监控曲线、验证结果和退出原因,下一次治理就能从证据出发。

常见问题

PolarDB-X 分片键选错了能在线修改吗?

AUTO 可用 ALTER TABLE ... PARTITION BY ... 在线修改,基础能力要求 5.4.13+,带 GSI 的分区表变更要求 5.4.14+。操作不锁表,但数据迁移会消耗资源,应安排低峰窗口和回退方案。

Online DDL 不锁表为什么还要低峰执行?

因为改分区键、表类型或创建 GSI 可能涉及数据回填与重分布,消耗 CPU、I/O 和网络。不阻塞 DML/SELECT 与业务性能完全不变是两件事。

PolarDB-X 扩容会停写吗?

AUTO 扩缩容无停写阶段并允许其他 DDL,DRDS 有短暂停写且不允许其他 DDL。两种模式都要评估数据重分布;AUTO 的一致性 HASH 也不等于扩容无需搬数据。

DRDS 模式可以创建全局二级索引吗?

可以显式创建,语法使用 DBPARTITION BY。它与 AUTO 的 PARTITION BY 不同;两种模式在默认索引列分区行为上有差别,不应混写。

分片热点只靠增加节点能解决吗?

不一定。低基数、大租户和顺序写入仍可能集中访问,需要先定位倾斜类型,再选择 KEY 热点散列、分区分裂迁移、二级分区或 Locality,并用变更后的请求分布验证。

总结

长期治理的关键是让模型、索引、分区和容量随业务一起演进。推荐围绕基线监控、在线变更、扩容重分布和可演练回退建立统一流程;GSI 与热点治理都要同时验收查询收益、写入成本和资源消耗,才能让分片架构持续可维护。

Sources


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049330/viewspace-3188760/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-01-19

  • 博文量
    945
  • 访问量
    830335