V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SQLite
cj323
V2EX  ›  SQLite

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

  •  
  •   cj323 · 16 天前 · 1055 次点击

    最近写了个对 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;
    
    4 条回复    2025-08-19 09:07:19 +08:00
    jiuhuicinv
        1
    jiuhuicinv  
       16 天前
    WAL 会多个文件出来。
    heimoshuiyu
        2
    heimoshuiyu  
       16 天前
    SQLite 怎么会有并发呢,写入都是单线程上锁的,自己写个单线程的 worker 顺序处理写操作可能比一堆线程在那竞争锁还快
    felixcode
        3
    felixcode  
       16 天前 via Android
    使用场景有问题
    strobber16
        4
    strobber16  
       16 天前 via Android
    当年我引入 sqlite 的时候问的 gpt ,gpt 就是给的一模一样的这三条
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3193 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:06 · PVG 20:06 · LAX 05:06 · JFK 08:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.