我的SQLite WAL文件有时变得非常大,我认为该文件保留了它的大小,并且只是在必要时开始覆盖,它是否只是重置它的大小?
我知道pragma wal_checkpoint(TRUNCATE)命令可以手动设置一个将文件大小减小到零的检查点,但我注意到了一些问题。
我启动了我的编写器,它创建了一个新的数据库,并开始将数据写入其中。在这个程序的开头,我发出了wal_checkpoint命令(显然是第一次运行,因为数据库中没有任何内容,它没有做任何事情)。读者根本没有被打断。当我关闭编写器并重新启动它(它重新连接并继续使用现有数据库)时,它会按预期清除wal文件,但现在(直到我删除数据库并重新开始)当读取器从数据库读取时,编写器获取SQLITE_BUSY异常 - 通常并非总是如此。
所以我想知道如果没有我调用wal_checkpoint,WAL会在某个时刻截断自己吗?如果有人可以回答:为什么它在调用之后的任何后续运行中都会导致我的SQLITE_BUSY异常?有没有比wal_checkpoint(Truncate)更好的方法?
答案 0 :(得分:0)
有点回答。我发现如果我让编写器关闭数据库连接并重新打开它,它将重置-wal文件的大小!