如果我查看数据库的数据库设置(使用SQLite管理器),我会发现freelist_count为16。根据此源代码,freelist计数为数据库文件中未使用的页数未使用的页面是什么意思?为什么会有未使用的页面?空闲列表计数大于零是不是不好?我该怎么做才能将这个数字减少到零?
1cosmwyk1#
从SQLite FAQ开始:(12)我删除了很多数据,但是数据库文件并没有变小。这是一个错误吗?不会。当您从SQLite数据库中删除信息时,未使用的磁盘空间会添加到内部“空闲列表”中,并在下次插入数据时重新使用。磁盘空间不会丢失,但也不会返回给操作系统。如果删除了大量数据并希望收缩数据库文件,请运行VACUUM命令。VACUUM将从头重建数据库。这将使数据库具有空的自由列表和最小的文件。但是,请注意:VACUUM可能需要一些时间才能运行(在开发SQLite的Linux机器上,每兆字节大约需要半秒),并且它在运行时可以使用原始文件两倍的临时磁盘空间。从SQLite 3.1版开始,使用VACUUM命令的替代方法是使用auto_vacuum杂注启用自动真空模式。有一些空闲页面并没有什么不好的,除非它们占用了大量的空间。这取决于你的应用程序的需要,你可以决定“没什么不好的”在哪里结束,“有意义的”在哪里开始。
1条答案
按热度按时间1cosmwyk1#
从SQLite FAQ开始:
(12)我删除了很多数据,但是数据库文件并没有变小。这是一个错误吗?
不会。当您从SQLite数据库中删除信息时,未使用的磁盘空间会添加到内部“空闲列表”中,并在下次插入数据时重新使用。磁盘空间不会丢失,但也不会返回给操作系统。
如果删除了大量数据并希望收缩数据库文件,请运行VACUUM命令。VACUUM将从头重建数据库。这将使数据库具有空的自由列表和最小的文件。但是,请注意:VACUUM可能需要一些时间才能运行(在开发SQLite的Linux机器上,每兆字节大约需要半秒),并且它在运行时可以使用原始文件两倍的临时磁盘空间。
从SQLite 3.1版开始,使用VACUUM命令的替代方法是使用auto_vacuum杂注启用自动真空模式。
有一些空闲页面并没有什么不好的,除非它们占用了大量的空间。这取决于你的应用程序的需要,你可以决定“没什么不好的”在哪里结束,“有意义的”在哪里开始。