fix+perf: SQLite连接busy_timeout修复并发锁/静态版本号缓存/删除资产批量清理/安全检查最新记录子查询修正/AI余额与SSL探测并发化/密钥常量时间比较

This commit is contained in:
gouki
2026-08-05 22:49:01 +00:00
parent 4f855ba0da
commit 4dba505d82
8 changed files with 121 additions and 58 deletions
+13 -9
View File
@@ -16,26 +16,26 @@ DATA_DIR.mkdir(parents=True, exist_ok=True)
ASSETS_DB_URL = f"sqlite:///{DATA_DIR / 'assets.db'}"
METRICS_DB_URL = f"sqlite:///{DATA_DIR / 'metrics.db'}"
# timeoutsqlite3 内置 busy 等待(秒),随连接创建生效。
# SQLite 默认使用 NullPool(每请求新建连接),PRAGMA busy_timeout 只在单连接有效,
# 必须通过 connect_args 传递,否则并发写入(Agent 上报 + 清理任务)会报 database is locked。
assets_engine = create_engine(
ASSETS_DB_URL,
echo=False,
connect_args={"check_same_thread": False},
pool_pre_ping=True,
connect_args={"check_same_thread": False, "timeout": 30},
)
metrics_engine = create_engine(
METRICS_DB_URL,
echo=False,
connect_args={"check_same_thread": False},
pool_pre_ping=True,
connect_args={"check_same_thread": False, "timeout": 30},
)
def _enable_wal(engine) -> None:
"""启用 WAL 模式,提升 SQLite 并发读写能力"""
"""启用 WAL 模式,提升 SQLite 并发读写能力journal_mode 持久化到库文件,设置一次即可)"""
import sqlalchemy as sa
with engine.connect() as conn:
conn.execute(sa.text("PRAGMA journal_mode=WAL"))
conn.execute(sa.text("PRAGMA busy_timeout=5000"))
_enable_wal(assets_engine)
@@ -152,12 +152,16 @@ def _backfill_provider_services(conn) -> None:
def get_session() -> Generator[Session, None, None]:
"""资产库会话(默认)"""
with Session(assets_engine) as session:
"""资产库会话(默认)
expire_on_commit=Falsecommit 后不失效对象属性,避免后续访问触发隐式
重新加载查询;需要最新值的场景由调用方显式 session.refresh()。
"""
with Session(assets_engine, expire_on_commit=False) as session:
yield session
def get_metrics_session() -> Generator[Session, None, None]:
"""监控 / 日志库会话"""
with Session(metrics_engine) as session:
with Session(metrics_engine, expire_on_commit=False) as session:
yield session