【问题标题】:Deleting/Shrinking HSQLDB lob files删除/缩小 HSQLDB lob 文件
【发布时间】:2015-09-25 05:47:09
【问题描述】:

我们正在使用 HSQLDB 2.3.2,我们希望删除包含 LOB 数据的文件。因为它占用了大量的磁盘空间。

我们已经将 LOB 列更改为 VARCHAR。所以我们不再有任何 LOB 列了。

$ ./execute_query.sh "SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, TYPE_NAME FROM INFORMATION_SCHEMA.SYSTEM_COLUMNS WHERE TYPE_NAME LIKE '%LOB%';"
TABLE_NAME  COLUMN_NAME  DATA_TYPE  TYPE_NAME
----------  -----------  ---------  ---------

以及我们的 HSQLDB 文件列表:

$ ls -hal
total 88G
drwxr-xr-x 3 admin admin 4.0K Sep 23 13:58 .
drwxr-xr-x 6 admin admin 4.0K Sep  1 09:27 ..
-rw-r--r-- 1 admin admin 1.5M Apr  9 01:13 hsqldb.jar
-rw-r--r-- 1 admin admin 2.9G Sep 23 13:53 hsqldb.db.data
-rw-r--r-- 1 admin admin   16 Sep 23 14:02 hsqldb.db.lck
-rw-r--r-- 1 admin admin  84G Aug 25 01:52 hsqldb.db.lobs
-rw-r--r-- 1 admin admin   70 Sep 23 14:00 hsqldb.db.log
-rw-r--r-- 1 admin admin   85 Sep 23 13:58 hsqldb.db.properties
-rw-r--r-- 1 admin admin 1.5G Sep 23 13:53 hsqldb.db.script
drwxr-xr-x 2 admin admin 4.0K Sep 23 13:54 hsqldb.db.tmp

我们想删除大的hsqldb.db.lobs 文件。

删除文件后,数据库确实可以正确启动并且运行良好。我可以运行查询。

但是在创建一个包含 LOB 列的表并向其中添加数据之后,hsqldb.db.lobs 文件会再次以原始大小创建(尽管它是一个稀疏文件)。

我怀疑可以通过修改 SYSTEM_LOBS 模式中的某些表值来完成更多的魔法。但我认为这不是一个很好的做法。

那么建议的方法是什么

  • 缩小 LOB 文件,使其更小(因为我们不使用数据)
  • 彻底删除 LOB 文件

【问题讨论】:

    标签: blob hsqldb


    【解决方案1】:

    删除文件后,数据库确实可以正确启动并且看起来 运行良好。我可以运行查询。

    此时您需要执行 CHECKPOINT 来重置 lob 表。这在这篇文章中描述的解决方法之后有效(忽略压缩设置):

    HSQLDB: enable LOB compression for existing database

    【讨论】:

    • 效果很好!在创建新的 blob 数据后,文件又变小了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2013-08-24
    • 2018-06-12
    • 1970-01-01
    • 2015-01-06
    相关资源
    最近更新 更多