现状
usage-index.sqlite 只在两种情况下删事件:源文件消失(pruneMissingFiles)、
文件重扫时替换(DELETE FROM usage_event WHERE source_file_id = ?)。
没有按时间的保留策略。
本机实测(2026-09-02):
|
|
| 事件数 |
23,190 |
| 覆盖 |
2026-07-21 → 2026-09-02(约 6 周) |
| 库体积 |
5 MB(1506 页 × 4096B,空闲页 247) |
推算一年约 20 万事件、43 MB。
为什么不急
查询性能不受影响——lifetime 聚合实测 10 ms 冷 / 0 ms 热,
即使事件数涨十倍也是几十毫秒。这纯粹是磁盘占用缓慢增长,
且 43 MB/年对一个本机工具可以接受。
真做的话要先解决什么
不能简单按时间删:UI 有 lifetime 周期,需要全量数据。可行方向是把
超出 90 天的明细事件折叠成按天 × 模型的聚合行,保住 lifetime 汇总的同时
丢掉逐事件粒度。这需要:
- 一张新的汇总表,或在
usage_event 里区分明细/汇总行;
- 折叠后
aggregate() 对两种行的合并逻辑;
- 空闲页已有 247 个,顺带考虑何时
VACUUM(注意不要在激活态做)。
因为要动索引 schema 和聚合口径,不适合顺手改。
不变量
- 折叠不得改变任何已展示周期的数字。
- 仍然只保存可重建的数字事件,不引入 prompt、回复或工具正文。
- VACUUM 或迁移属于激活态重活,需要预算与取消路径(见 AGENTS.md 资源约束)。
现状
usage-index.sqlite只在两种情况下删事件:源文件消失(pruneMissingFiles)、文件重扫时替换(
DELETE FROM usage_event WHERE source_file_id = ?)。没有按时间的保留策略。
本机实测(2026-09-02):
推算一年约 20 万事件、43 MB。
为什么不急
查询性能不受影响——lifetime 聚合实测 10 ms 冷 / 0 ms 热,
即使事件数涨十倍也是几十毫秒。这纯粹是磁盘占用缓慢增长,
且 43 MB/年对一个本机工具可以接受。
真做的话要先解决什么
不能简单按时间删:UI 有
lifetime周期,需要全量数据。可行方向是把超出 90 天的明细事件折叠成按天 × 模型的聚合行,保住 lifetime 汇总的同时
丢掉逐事件粒度。这需要:
usage_event里区分明细/汇总行;aggregate()对两种行的合并逻辑;VACUUM(注意不要在激活态做)。因为要动索引 schema 和聚合口径,不适合顺手改。
不变量