删除或缩小HSQLDB数据库中的lobs文件

时间:2014-05-06 06:46:28

标签: hsqldb

我正在使用HSQLDB 2.3.0。我有一个以下架构的数据库:

CREATE TABLE MEASUREMENT (ID INTEGER NOT NULL PRIMARY KEY IDENTITY, OBJ CLOB);

当我用测试数据填充此表时,我的数据库中的LOBS文件会增长:

ls -lath

-rw-rw-r-- 1 hsqldb hsqldb   35 May  6 16:37 msdb.log
-rw-rw-r-- 1 hsqldb hsqldb   85 May  6 16:37 msdb.properties
-rw-rw-r-- 1 hsqldb hsqldb   16 May  6 16:37 msdb.lck
drwxrwxr-x 2 hsqldb hsqldb 4.0K May  6 16:37 msdb.tmp
-rw-rw-r-- 1 hsqldb hsqldb 1.6M May  6 16:37 msdb.script
-rw-rw-r-- 1 hsqldb hsqldb 625M May  6 16:35 msdb.lobs

运行以下命令后:

TRUNCATE SCHEMA public AND COMMIT;
CHECKPOINT DEFRAG;
SHUTDOWN COMPACT;

lobs文件的大小仍然相同:

-rw-rw-r-- 1 hsqldb hsqldb   84 May  6 16:44 msdb.properties
-rw-rw-r-- 1 hsqldb hsqldb 1.6M May  6 16:44 msdb.script
-rw-rw-r-- 1 hsqldb hsqldb 625M May  6 16:35 msdb.lobs

截断架构并获取所有磁盘空间的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

我有一个使用hsqldb 2.3.3的相同问题的应用程序。即使在调用" checkpoint defrag"之后,.lobs文件似乎也在无限增长。我的方案是我每次插入1000个300字节的blob。我定期删除它们并插入大约相同大小的1000个新blob。经过多次这个我的.lobs文件现在大小为1,3GB,但它实际上只存储了大约300kB的数据。尽管调用checkpoint碎片整理,但.lobs文件只是增长和增长。这个行为是一个错误吗?

答案 1 :(得分:0)

数据库引擎设计用于在实际应用程序中连续使用。如果你有一个使用lobs并删除其中一些的应用程序,那么在每个检查点之后,该空间将被重用于未来的lobs。

在正常的应用程序使用中,DELETE语句用于删除行。此语句在每个检查点之后释放lob空间以供重用。

您可以以重新创建数据库的方式设计测试,而不是在删除数据后重用旧数据库。