diff --git a/scripts/vacuum_state_db.py b/scripts/vacuum_state_db.py new file mode 100644 index 00000000..34455077 --- /dev/null +++ b/scripts/vacuum_state_db.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +"""vacuum_state_db.py — 每周整理state.db,防止磁盘I/O退化 + +在非交易时段运行(周六凌晨),不影响交易系统。 +""" +import sqlite3, os + +DBS = [ + "/home/hmo/.hermes/profiles/position-analyst/state.db", + "/home/hmo/.hermes/state.db", +] + +for db_path in DBS: + if not os.path.exists(db_path): + continue + size_before = os.path.getsize(db_path) / 1024 / 1024 + try: + c = sqlite3.connect(db_path) + c.execute("PRAGMA auto_vacuum=2") + # 只做incremental vacuum,不做full vacuum(耗时太长) + c.execute("PRAGMA incremental_vacuum(50000)") + c.execute("PRAGMA cache_size=-200000") + c.execute("PRAGMA mmap_size=268435456") + c.execute("PRAGMA wal_checkpoint(TRUNCATE)") + c.close() + size_after = os.path.getsize(db_path) / 1024 / 1024 + saved = size_before - size_after + print(f"{db_path.split('/')[-2]}: {size_before:.0f}MB -> {size_after:.0f}MB (reclaim {saved:.0f}MB)") + except Exception as e: + print(f"{db_path.split('/')[-2]}: ERROR {e}")