我正在使用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
截断架构并获取所有磁盘空间的最佳方法是什么?
答案 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空间以供重用。
您可以以重新创建数据库的方式设计测试,而不是在删除数据后重用旧数据库。