运行 SQLite 学到的一些事
来源:jvns.ca — 2026-07-17
📋 概述
作者 Julia Evans 分享了她在 Django 网站中使用 SQLite 作为生产数据库的最新经验,包括 ANALYZE 命令对查询优化的巨大作用、清理大数据时遇到的锁超时问题、两种备份方案(restic 与 litestream),以及按业务拆分多个数据库文件的思路。
🔑 核心要点
- ANALYZE 至关重要:对 4000 行表运行 FTS5 查询原本耗时 5 秒,执行
ANALYZE 后降至约 0.05 秒,查询规划器因此能做出更优选择。
- 清理数据库要小心:批量
DELETE 可能长时间持有锁,导致其他 worker 写入超时并崩溃,建议分小批处理,或考虑计划内维护窗口。
- ORM 查询性能:目前数据库很小(约 1 万行),使用 Django ORM 尚未遇到性能问题,但作者表示会持续关注。
- 备份方案:介绍了 restic(
VACUUM INTO + gzip + S3)和 litestream(增量复制)两种方式,后者可避免 restic 偶发的 OOM 问题。
- 多数据库策略:以 Mess with DNS 为例,将表拆分到三个独立数据库文件,已稳定运行四年,从 Postgres 迁移到 SQLite 是正确决定。
💡 金句
SQLite is still a database, databases are complicated, and I do not know a lot about operating databases.
(SQLite 终究还是个数据库,数据库很复杂,而我对运维数据库知之甚少。)
👍 0
👎 0
← 返回 Lobsters 首页