SuperAPI AI 工具集

analyzing-schema-change-storage-risk

智能体与模型

查看项目

更新于 10-15 20:13

技能介绍

用途:在执行可能触发数据回填的在线 schema 变更前,估算所需存储余量,降低因磁盘不足导致作业暂停的风险。适用操作包括 CREATE INDEX、ADD COLUMN 带 INDEX 或 UNIQUE、ALTER PRIMARY KEY、CREATE MATERIALIZED VIEW、CREATE TABLE AS、REFRESH MATERIALIZED VIEW,以及会重写数据的 ALTER TABLE ... SET LOCALITY。索引较小(KB 到几 MB)的表风险可忽略,无需估算。

主要能力:官方建议按受影响表或索引大小的最多 3 倍预留空闲空间,这是保守安全上限而非精确预测。CREATE INDEX 通常只需约新索引 1 倍空间;ALTER PRIMARY KEY 因旧数据保留至 GC,峰值可接近整表大小。回填通过 AddSSTable 写入,若单店剩余容量低于 kv.bulk_io_write.min_capacity_remaining_fraction(默认 0.05)会返回 InsufficientSpaceError,作业被暂停而非拖垮集群。

使用方式:第一步检查每店空闲空间,最小空闲值才是约束,可用 DB Console 的 Overview → Storage 页面,或抓取 Prometheus 端点:curl -ks https://<node>:8080/_status/vars | grep -E '^capacity( |_used|_available)'。第二步估算表/索引大小:SHOW RANGES FROM TABLE <table> WITH DETAILS, KEYS, INDEXES; 再按 index_name 聚合 range_size_mb 得到各索引总量。第三步与操作对照:CREATE INDEX 按新索引 3 倍,ALTER PRIMARY KEY 按整表 3 倍,物化视图按预期结果 3 倍。若最小空闲远高于目标即可执行,接近则先释放空间。

限制:SHOW RANGES ... WITH DETAILS 开销大,须指定具体表,避免全集群执行,数千 range 的表建议在维护窗口运行。range_size_mb 为近似值且可能滞后。若作业因 InsufficientSpaceError 暂停,需释放磁盘后恢复;可用 SHOW JOBS 查询暂停的 SCHEMA CHANGE 作业。优先删除 crdb_internal.index_usage_statistics 显示未使用的索引以腾出空间。相关技能:analyzing-range-distribution。