lcx 的笔记

SQLite WAL 文件越来越大的原因

2026-09-12

某个小服务的数据库只有几百 KB,旁边的 -wal 文件却涨到了几 MB。原因很简单:WAL 只有在 checkpoint 时才会写回主库并截断,而只要有一个读连接一直开着,checkpoint 就推进不到末尾。

排查步骤:

sqlite3 app.db "PRAGMA wal_checkpoint(TRUNCATE);"
# 返回 busy=1 说明还有读者占着旧快照

解决办法是让长连接定期结束事务,或者在低峰期由程序自己调用一次 wal_checkpoint(TRUNCATE)。另外,备份时不要直接 cp 正在写入的库,用 .backup 命令更稳。