Skip to content

SQLite 写路径基线(采集模板) ​

状态:打点与采集入口已就绪,两轮实测待目标机执行。P1 只增加打点,不改任何节奏。
采集目标机:Lite 2C4G。采集前确认 DATABASE_WRITE_PATH_METRICS_ENABLED=true。
静态推导对照值见 architecture-assessment-sqlite-2026-09.md §3.3(约 22 次写 DML / 秒)。

1. 开启打点 ​

powershell
# 仅采集期开启;生产默认 false
$env:DATABASE_WRITE_PATH_METRICS_ENABLED = "true"

打点覆盖:

指标来源
SQL 数与耗时(读/写分列,按 loop 归因)app/db/session.py → before/after_cursor_execute
写冲突次数is_sqlite_lock_error 两份判据命中时 record_write_conflict
有效/无效写(rowcount)SQL 打点携带 cursor.rowcount
空轮询比例record_poll(empty=...)(需在各 claim 入口调用)
tick P50/P95record_tick(duration_ms)(需在各 loop 入口调用)
busy_timeout 耗尽record_busy_timeout(捕获 OperationalError 时)

2. 采集口径 ​

两种负载各一轮:

  1. 空闲 10 分钟:无用户请求、无 AI Run、Renderer 可达。
  2. 混合负载:5 个页面变更 + 截图 + 预览并发。

每轮记录:

  • SQL/s(读写分列)
  • 写事务/s
  • database is locked 次数
  • busy_timeout 命中与耗尽比
  • 最长写等待
  • 各 tick P50/P95
  • 容器 RSS

导出快照:

powershell
# 运行中 Backend(推荐)
curl -fsS http://127.0.0.1:8000/metrics/db-write > .tmp/baseline-sqlite-idle.json

# 或同进程 CLI
uv run --project backend python -m app.scripts.dump_db_write_metrics

说明:打点默认关闭;采集前确认 Backend 以 DATABASE_WRITE_PATH_METRICS_ENABLED=true 启动,否则快照 enabled=false 且计数为 0。

3. 原始数据 ​

3.1 空闲 10 分钟 ​

字段值
采集时间待填
环境待填
SQL/s 读待填
SQL/s 写待填
写事务/s待填
database is locked待填
busy_timeout 耗尽待填
最长写等待待填
tick P50/P95待填
RSS待填
快照 JSON见附录

3.2 混合负载 ​

字段值
采集时间待填
负载描述5 页面变更 + 截图 + 预览
SQL/s 读待填
SQL/s 写待填
写事务/s待填
database is locked待填
busy_timeout 耗尽待填
最长写等待待填
tick P50/P95待填
RSS待填
快照 JSON见附录

4. 与静态推导对照 ​

口径静态推导(§3.3)实测空闲实测混合
写 DML / 秒≈22待填待填
空闲态写事务>0(6 处无条件写)待填—
external cleanup 4×UPDATE2Hz待填—
render tick expire+heartbeat4Hz×(1+W)待填—

5. 决策门 D2(结构性判据) ​

判据若成立若不成立本轮结论
空闲态写事务数 > 0P3 全做,目标空闲零写 DMLP3 只做退避 + 死代码清理待填
混合负载出现 database is lockedrun_with_write_retry 提为 P3 前置P2 可按 D1 裁剪待填
某 loop tick P95 > 轮询间隔该 loop 优先开刀按 §6.4 既定顺序待填

6. 验收 ​

  • [ ] 基线文档含采集命令、环境与原始输出,可复现。
  • [ ] 打点在 PG 上零行为变更(只计数)。
  • [ ] database_write_path_metrics_enabled=false 时无监听器安装、无计数开销路径生效。

附录:快照导出 ​

powershell
curl -fsS http://127.0.0.1:8000/metrics/db-write > .tmp/baseline-sqlite-idle.json
# 或混合负载轮次
curl -fsS http://127.0.0.1:8000/metrics/db-write > .tmp/baseline-sqlite-mixed.json