我们在文件模式下有hibernate-hsql组合。在生产中,我们发现.lob文件正在增长,现在它的大小约为2.5GB。我们手动检查了数据内容,它只有2 MB。
经过几个hsql论坛后,我们注意到即使删除clob记录后也不会从.lob文件中回收空间。这就是为什么.lob文件大小不断增加,最终备份时间过长的原因。
这是迁移到H2的原因。这会解决问题吗?
答案 0 :(得分:1)
如果您的应用程序使用了lobs并删除了其中一些,则该空间将重复用于将来的lobs。
在正常的应用程序使用中,DELETE
语句用于删除行。该语句解除分配高空空间以供重用。
您可以以重新创建数据库的方式设计测试,而不是在删除数据后重用旧数据库。但这将是如此昂贵。所以HSQL没办法。
我不太了解H2,当我说Delete
时,如果在H2中有一些机制不仅要解除空间而且还要对文件进行物理删除(IO),那么迁移将有助于你。
请详细回答此链接HSQLDB and .lobs file size以及如果您回答最后的评论,您会找到答案。
答案 1 :(得分:1)
在每个CHECKPOINT之后回收HSQLDB的.lob文件文件的空间。然后将回收的空间用于新的空间。
生产服务器只插入一次大量的lobs是不正常的,在删除旧数据后不添加更多。因此,此架构适用于大多数用例。
您可以在存储非常少的数据时清除.lobs文件。
HSQLDB与大多数其他开源数据库不同,因为它有一个专用的lobs文件。 lobs的管理与普通数据是分开的,因为大的lob数据不会影响对非lob列的较小数据的访问。您还可以将lobs压缩与较小的LOB SCALE一起使用,以减少其存储空间,而不会影响正常数据。