分享适合高并发场景的 SQLite 设置

2025 年 8 月 19 日
 cj323

最近写了个对 sqlite 数据库读写都比较大且频繁的程序,踩了一些坑。最后用了如下配置最大化 sqlite3 的性能。

PRAGMA journal_mode = WAL;
PRAGMA busy_timeout = 5000;
PRAGMA synchronous = NORMAL;
  1. journal_mode = WAL: 支持读写同时进行。高并发下提升最明显
  2. busy_timeout:可以缓解同时多写入时的 SQLITE_BUSY 报错。5000 是五秒。
  3. PRAGMA synchronous = NORMAL; 减小默认同步频率

内存够用的话还可以设置这两个选项加大内存缓存。

PRAGMA cache_size = 1000000000;
PRAGMA temp_store = memory;
1747 次点击
所在节点    SQLite
4 条回复
jiuhuicinv
2025 年 8 月 19 日
WAL 会多个文件出来。
heimoshuiyu
2025 年 8 月 19 日
SQLite 怎么会有并发呢,写入都是单线程上锁的,自己写个单线程的 worker 顺序处理写操作可能比一堆线程在那竞争锁还快
felixcode
2025 年 8 月 19 日
使用场景有问题
strobber16
2025 年 8 月 19 日
当年我引入 sqlite 的时候问的 gpt ,gpt 就是给的一模一样的这三条

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1153321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX