SQLite WAL 模式下的同步性与数据持久性权衡
2025-08-24
SQLite的WAL模式(默认是journal模式)为了提高写入吞吐量,牺牲了一定的数据持久性。同步模式pragma控制fsync的调用方式,默认为NORMAL。在这种模式下,WAL文件在每个检查点之前同步,数据库文件在每个检查点完成后同步,但大多数事务期间不进行同步操作。如果持久性不是问题,NORMAL模式足以满足WAL模式下的需求。若需在每次提交时调用fsync,则应将同步模式设置为FULL,这会在每次事务提交后额外同步WAL文件,提高数据持久性,但会降低写入速度。有人质疑SurrealDB在基准测试中为了更好的结果而牺牲了数据持久性,这篇文章以此为例解释了SQLite中的相关机制。
(avi.im)