库体积治理:先量化,再动手

库体积治理:先量化,再动手 A data-flow diagram generated by Archify. 01 / 源头 02 / 双写(重复) 03 / 量化病灶 04 / 治理 05 / 看护收口 脚本输出 · stdout / stderr · 01 / 源头 · 每任务一条 脚本输出 stdout / stderr 每任务一条 output 字段 · 任务库全量原文 · 02 / 双写(重复) · 4,637 MB output 字段 任务库全量原文 4,637 MB 任务日志文件 · 全量存档 · 02 / 双写(重复) · 与入库重复 任务日志文件 全量存档 与入库重复 体积量化 · 4.68 GB / 86,287 行 · 03 / 量化病灶 · output 占 99.2% 体积量化 4.68 GB / 86,287 行 output 占 99.2% 摘要化 · 首尾各 8KB,上限 16,452 字节 · 04 / 治理 · 全量仍在日志 摘要化 首尾各 8KB,上限 16,452 字节 全量仍在日志 存量归档 · 30 天前 → 按月压缩 · 04 / 治理 · 绝不删行 存量归档 30 天前 → 按月压缩 绝不删行 看护四项 · 体积 / 增速 / 开关 / 实效 · 05 / 看护收口 · >120 MB 告警 看护四项 体积 / 增速 / 开关 / 实效 >120 MB 告警 数据盘归档区 · 压缩包 + 元数据 · 05 / 看护收口 · 保留 12 个月 数据盘归档区 压缩包 + 元数据 保留 12 个月 写入 output 字段 每任务一条 全量存档 第二份副本 扫描字段 占全库 99.2% 治增量 入库前压缩 治存量 先验证再清 投影 −77% 178 → 41 MB/天 落数据盘 保留 12 个月 Legend 主数据流 异步/旁路 入库 默认流向

先量化:4.68 GB 里 99.2% 是同一份

  • • 库 4.68 GB,其中 output 字段 4,637 MB / 86,287 行
  • • 平均每条 56 KB,最大 5.7 MB
  • • 增长 178 MB/天 → 约 4.7 个月写满系统盘,而该库在系统盘上且当时只剩 25 GB

治理三招

  • • 摘要化:入库前压成「首尾各 8KB」的摘要,上限约 16,452 字节,中间省略并标注「完整输出见任务日志」,全量仍在日志文件
  • • 存量归档:30 天前的行导出成按月压缩包 + 元数据,落到数据盘,保留 12 个月;铁律是先归档 → 逐字节验证(抽样 + sha256)→ 才清字段,绝不删行
  • • 看护四项:绝对体积、日增速(>120 MB/天告警)、机制是否被关、摘要是否真在生效(看最近 200 条平均尺寸)

反直觉:清空字段,库不会立刻变小

  • • SQLite 只是把这些页标记为空闲,放进 freelist
  • • 新写入会复用这些空闲页,所以是先停止增长
  • • 想真正收缩要择机 VACUUM,且需要约等于全库大小的临时空间
  • • 结果:全库投影 4,637 MB → 1,067 MB(−77%),日增 178 → 41 MB/天