0

我正在构建一个由 sqlite3 数据库支持的缓存。为了限制使用的磁盘空间,我会定期检查 db 文件的大小。如果超过了我的最大限制,我会批量删除最旧的项目并清理,重复直到大小低于最大值的 80%。

但是,文件大小在清理后并没有立即改变,我通常会在大小下降之前删除整个表。所有调用都返回SQLITE_OK,在任何地方都看不到任何错误。

while (too_many_rows) {
    // delete N rows
    sqlite3_exec(database, "VACUUM;", NULL, NULL, &error);
    sqlite3_close(database);
    // check file size
    printf("%d deleted, new size %d KB\n", N, size);
}

产生类似的东西:

200 deleted, new size 400 KB
200 deleted, new size 400 KB
200 deleted, new size 360 KB
200 deleted, new size 360 KB
156 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 16 KB

我如何知道真空何时完成,并且我可以再次检查文件大小?

sqlite 可以告诉我还是被阻止?我需要使用inotify还是什么?

4

0 回答 0