SQLite WAL文件本身是否会减小尺寸?

时间:2018-02-27 19:20:10

标签: sqlite wal

我的SQLite WAL文件有时变得非常大,我认为该文件保留了它的大小,并且只是在必要时开始覆盖,它是否只是重置它的大小?

我知道pragma wal_checkpoint(TRUNCATE)命令可以手动设置一个将文件大小减小到零的检查点,但我注意到了一些问题。

我启动了我的编写器,它创建了一个新的数据库,并开始将数据写入其中。在这个程序的开头,我发出了wal_checkpoint命令(显然是第一次运行,因为数据库中没有任何内容,它没有做任何事情)。读者根本没有被打断。当我关闭编写器并重新启动它(它重新连接并继续使用现有数据库)时,它会按预期清除wal文件,但现在(直到我删除数据库并重新开始)当读取器从数据库读取时,编写器获取SQLITE_BUSY异常 - 通常并非总是如此。

所以我想知道如果没有我调用wal_checkpoint,WAL会在某个时刻截断自己吗?如果有人可以回答:为什么它在调用之后的任何后续运行中都会导致我的SQLITE_BUSY异常?有没有比wal_checkpoint(Truncate)更好的方法?

1 个答案:

答案 0 :(得分:0)

有点回答。我发现如果我让编写器关闭数据库连接并重新打开它,它将重置-wal文件的大小!