北辰的博客

SQLite 开启 WAL 之后

2026-10-05

一个小工具用 SQLite 存数据,后台任务写入时前台读取经常报 database is locked。打开 WAL 模式后读写互不阻塞,问题消失。

PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
PRAGMA busy_timeout = 5000;

注意 WAL 会多出 -wal 和 -shm 两个文件,备份时要一起拷,或者直接用 sqlite3 db ".backup out.db"。