为什么我的sqlite3数据库的大小不会减小?

时间:2015-10-18 22:19:08

标签: ruby-on-rails sqlite paperclip

我正在为Rails应用程序测试一些destroy命令,我想确保Paperclip实际上删除了与我的模型相关的文件。

我成功运行了destroy命令,我从Rails和Paperclip中成功销毁了消息,所以我知道它已经消失了。

令我感到困惑的是,尽管删除了704 Kb的图像,但为什么我的数据库的大小似乎没有减少。

根据ls -lh,我的development.sqlite3文件在销毁之前是17K,在之后是17K。

为什么我的数据库文件中没有缩小尺寸?

2 个答案:

答案 0 :(得分:2)

VACUUM命令通过将其内容复制到临时数据库文件并从副本重新加载原始数据库文件来清除主数据库。这样可以消除空闲页面,使表格数据保持连续,并以其他方式清理数据库文件结构。

当从数据库中删除对象时,它会留下空白区域。下次将新信息添加到数据库时,将重用此空白空间。但与此同时,数据库文件可能比严格必要的更大。

Source

答案 1 :(得分:2)

SQLite FAQ

中介绍了这一点
  

(12)我删除了大量数据,但数据库文件没有变小。这是一个错误吗?

     

没有。从SQLite数据库中删除信息时,未使用的磁盘空间将添加到内部“空闲列表”中,并在下次插入数据时重复使用。磁盘空间不会丢失。但它也没有返回到操作系统。

     

如果删除大量数据并想要收缩数据库文件,请运行VACUUM命令。 VACUUM将从头开始重建数据库。这将使数据库保留一个空的空闲列表和一个最小的文件。但请注意,VACUUM可能需要一些时间才能运行,并且在运行时它可以使用最多两倍的原始文件临时磁盘空间。

     

使用VACUUM命令的另一种方法是自动真空模式,使用auto_vacuum pragma启用。