#!/usr/bin/env python3 """LanceDB VACUUM: optimize(compaction+prune) memoryweave 35G 治理 v3""" import lancedb, time, os from datetime import timedelta start = time.time() db = lancedb.connect("/var/lib/memoryweave") def human(n): return f"{n/1024**3:.2f}G" if n > 1024**3 else f"{n/1024**2:.0f}M" def dir_size(p): return sum(os.path.getsize(os.path.join(dp, f)) for dp, _, fns in os.walk(p) for f in fns if os.path.isfile(os.path.join(dp, f))) for name in ["memories", "episodes"]: t0 = time.time() t = db.open_table(name) before = dir_size(f"/var/lib/memoryweave/{name}.lance") print(f"=== [{name}] VACUUM 开始 rows={t.count_rows()} size={human(before)} ===", flush=True) try: t.optimize(cleanup_older_than=timedelta(days=0), delete_unverified=False, retrain=False) print(f" optimize OK ({time.time()-t0:.0f}s)", flush=True) except Exception as e: print(f" optimize 失败: {e}", flush=True) after = dir_size(f"/var/lib/memoryweave/{name}.lance") print(f" [{name}] 完成: rows={t.count_rows()} size {human(before)} → {human(after)} ({time.time()-t0:.0f}s)", flush=True) print(f"\n=== 全部完成 总耗时 {time.time()-start:.0f}s ===", flush=True) print(f"memoryweave 总大小: {human(dir_size('/var/lib/memoryweave'))}", flush=True)