PRAGMAcremental_vacuum(1000)仅删除一页,为什么?

时间:2019-05-17 16:46:29

标签: sqlite

我有一个test.dbsqlite3数据库。 auto_vacuum=incremental,但是,当我删除大量数据库后调用PRAGMA incremental_vacuum(1000)时,incremental_vacuum仅删除了一页-4096B or 4K的大小,我不知道为什么它做到了。

要删除的页面数量是否有上限?

是否存在我不知道必须更改的compile_option

欢迎所有想法。

2 个答案:

答案 0 :(得分:0)

您应该尝试使用VACUUM命令,这将重建数据库,并删除已删除的数据。

使用PRAGMA incremental_vacuum(1000)仅释放空闲列表中的页面(您可以使用PRAGMA freelist_count获取空闲列表中的页面数)。

答案 1 :(得分:0)

您没有提到如何访问SQLite数据库。可能的原因之一可能是您的代码使用了sqlite3_step API(直接或间接通过某些包装库间接使用)API,该API每步可以清除一页。

如果是这种情况,则需要循环直到sqlite3_step()返回SQLITE_DONE(而不是SQLITE_ROW),或者切换到使用sqlite3_exec包装器。

请参阅possibly similar question