我有一個空的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