关于 db-partitioning-sharding
db-partitioning-sharding 是用于评估数据库分区与分片设计的审计技能,面向数据库架构审查。它检查分区需求、热点与倾斜,以及缺乏规模依据的过早分片,并要求用运行时数据验证规模判断。
主要功能
- 01识别适合分区的大型表
- 02检查分区键热点与倾斜
- 03发现缺乏依据的过早分片
- 04使用目录查询验证表大小
- 05按性能维度输出审计发现
适用场景
- 01审查日志或事件表的分区方案
- 02检查分区键是否造成写入集中
- 03评估现有分片是否有规模依据
- 04用 PostgreSQL 查询验证候选表
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hainrixz/ claude-db --skill db-partitioning-sharding安装后在 Claude Code 中输入/db-partitioning-sharding确认已加载。
详细介绍
db-partitioning-sharding (M16)
扩展拓扑属于性能与规模(轴 performance);关联关系型 Escala w12(与 M17/M2/M9 共用),以及 NoSQL 配置文件中的 Shard-key / Partición&hot 类别。两个失误方向是对称的:扩展太迟(本应分区的巨型表)和扩展太早(5 GB 的数据库单节点即可轻松处理,却进行了分片)。
检查内容
- 分区适用性 — 大型仅追加型 / 时序表(事件、日志、指标),这类表可通过 Postgres 声明式范围 / 列表分区受益(低成本裁剪、快速删除保留期数据),但目前仍是单个堆表。
- 热分区 / 键倾斜 — 分区键或分片键的基数较低,或存在时间倾斜(例如按
tenant_id分区,但某个租户占了 90% 的流量,或所有写入都命中“今天”的分区)。在宽列存储中,事件表上的无界 / 热分区属于severity:5(性能),但必须有实时写入速率证据;否则为directional。 - 过早分片 — 引入应用层分片 / 多个分片,却没有规模或吞吐量方面的依据,徒增跨分片查询和重新均衡成本,毫无收益。
评分 / 轴
仅影响 performance(关系型 Escala w12;Shard-key 文档型 / Partición&hot KV+WC / Escala 向量型+图数据库)。
Tier-0(静态)
检测分区 DDL(PARTITION BY、分区子表)、选用的分区 / 分片键及其表观基数、根据命名 / 列识别的大表候选(时间戳 + 高写入意图),以及分片扇出代码。表的大小、行数和每个分区的写入速率属于运行时数据 → Tier-0 时标记为 needs_api(绝不静默通过)。
Tier-1/2(验证查询,Postgres)
-- partition inventory + sizes (Tier-1):
SELECT inhparent::regclass AS parent, inhrelid::regclass AS partition,
pg_size_pretty(pg_total_relation_size(inhrelid)) AS sz
FROM pg_inherits ORDER BY pg_total_relation_size(inhrelid) DESC;
-- candidate (unpartitioned) large tables:
SELECT relname, pg_size_pretty(pg_total_relation_size(oid)) AS sz, reltuples::bigint AS est_rows
FROM pg_class WHERE relkind='r' ORDER BY pg_total_relation_size(oid) DESC LIMIT 20;
方法 schema_introspect / query_stat。大型未分区表可确认分区适用性问题,标记为 established;分区倾斜需要 Tier-2 写入统计数据——缺少这些数据时,热分区问题为 directional,且绝不构成上限。
发现项
按 schema/finding.schema.json 输出发现项。示例:
M16.events.unpartitioned_large_table— 大型仅追加型表仍是单个堆表(severity:3、warn、轴performance,置信度:Tier-1 为established/ Tier-0 为needs_api,fixable: advisory)。M16.metrics.hot_partition_today— 所有写入都命中当前分区 / 键倾斜(静态时为severity:3、warn、directional/ Tier-2 时为established;宽列存储事件表仅在有实时写入速率数据时才为severity:5,fixable: advisory)。M16.app.premature_sharding— 分片没有规模 / 吞吐量方面的依据(severity:2、warn、directional、fixable: advisory)。
每个发现项:evidence.observed 原样引用 DDL / 分片代码 / 目录行;verification.reproduce 为上述引用 $DATABASE_URL 的查询;expected_impact 必须注明影响区间和置信度(不得只给出百分比)。
诚信原则
- 分区确实会带来开销(规划时间、跨分区约束)——只有表确实很大,或确实需要保留期管理 / 裁剪时才建议分区,绝不能将其视为默认方案。
- 绝不编造行数或表大小来支持(或反驳)分区建议——规模判断需要 Tier-1 数据;缺少时,输出
needs_api。 - 热分区的 sev-5 需要实时写入速率证据;基于静态键基数的猜测只能标记为
directional,且不能构成上限。 - 这些都属于架构变更 → 标记为
advisory(具体的声明式分区迁移方案可标记为proposed),绝不能标记为auto。