2

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

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

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

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

4

1 回答 1

0

一种答案。我发现如果我让作者关闭数据库连接并重新打开它,它将重置 -wal 文件的大小!

于 2018-02-28T17:05:35.570 回答