我从表中删除了很多记录但是DB大小(Firebird)保持不变。我该如何减少它?
我在PostgreS中寻找类似于真空的东西。
答案 0 :(得分:2)
这是火鸟的众多痛苦之一。 最好也是唯一有效且正确的方法 - 使用gbak
备份/恢复数据库答案 1 :(得分:1)
Firebird偶尔会进行扫描以从索引等中删除记录,并重新获得其他用途的空间。换句话说,只要扫描运行,您将具有与数据库文件较小时相同的性能。如果您正在尝试这样做,则可以强制执行立即扫描。
但是,实际数据库的大小不会缩小,除非您进行备份和还原。如果大小有问题,请对gbak使用-USE_ALL_SPACE参数,它将阻止为将来的记录保留该空间,这将产生一个较小的数据库。
答案 2 :(得分:0)
许多用户想知道为什么他们没有获得磁盘空间 从数据库中删除大量记录。
原因是这是一项昂贵的操作,它需要一个 大量的磁盘写入和内存 - 就像进行重新分段一样 硬盘分区。使用的数据库(页面)部分 此类数据标记为空,Firebird下次将重复使用它们 它需要写新数据。
如果磁盘空间对您来说至关重要,您可以获取空间 做备份然后恢复。因为你正在做备份 立即恢复,使用“抑制垃圾收集”是明智的 或“不要使用垃圾收集”开关(-G在gbak中),这将使 备份变得更快。垃圾收集用于清理你的垃圾 数据库,因为它是一项维护任务,它通常是一起完成的 备份(因为备份必须通过整个数据库)。 但是,你很快就会放弃那个数据库文件,而且没有 需要清理它。