我有一个空的100 MB Sqlite文件,并根据Sqlite的哪个版本我抽它,创建一个4k或100 MB的日志文件(我拦截创建与inotifywait
,并链接到它,所以我可以看到它)。两种日记模式都是delete
。100 MB空文件的Sqlite真空创建100 MB日志
在release log中,我只能找到one hint关于真空优化,可能会导致这种变化,但我不能真正看到这是否是原因。
无论如何,为什么Sqlite的任何版本都会创建一个100 MB的日志来抽取100 MB的Sqlite文件,其中一个空的表?
版本:
- 3.7.13 2012-06-11 2时05分22秒f5b5a13f7394dc143aa136f1d4faba6839eaa6dc
- 3.14.1 2016年8月11日18时53分32秒a12d8059770df4bca59e321c266410344242bf7b
编辑:
这是我如何捕获任何创建的文件:
for fil in $(inotifywait -e create . |awk '{ print $3 }'); do ln $fil $fil-linked; done
随着更新的版本,只有4k杂志是没有别的。
编辑2:
混淆真空越来越多。该手册指出:“VACUUM命令通过将数据库内容复制到临时数据库文件中,然后用临时文件的内容覆盖原始文件。”。但是,当我使用inotifywait -m .
时,我没有看到。我看到的是,在两个空DB和一个数据:
./ ACCESS testdb.sqlite3
./ ACCESS testdb.sqlite3
./ ACCESS testdb.sqlite3
./ ACCESS testdb.sqlite3
./ CREATE testdb.sqlite3-journal
./ OPEN testdb.sqlite3-journal
./ MODIFY testdb.sqlite3-journal
./ MODIFY testdb.sqlite3-journal
./ MODIFY testdb.sqlite3-journal
./ MODIFY testdb.sqlite3-journal
./ MODIFY testdb.sqlite3-journal
./ MODIFY testdb.sqlite3-journal
./ MODIFY testdb.sqlite3-journal
./ OPEN,ISDIR
./ CLOSE_NOWRITE,CLOSE,ISDIR
./ MODIFY testdb.sqlite3-journal
./ MODIFY testdb.sqlite3
./ CLOSE_WRITE,CLOSE testdb.sqlite3-journal
./ DELETE testdb.sqlite3-journal
而且没有日记:
./ ACCESS testdb.sqlite3
./ MODIFY testdb.sqlite3
Secure_delete未打开。我想说,一个空数据库的临时副本将是空的。我仍然不明白为什么它会这样做。 – Halfgaar
数据库*文件*的临时副本同样大。 –
在我的文章中查看inotify命令:我捕获了任何已创建的文件。没有大文件。 – Halfgaar