Deleting/Shrinking HSQLDB lob 文件
Deleting/Shrinking HSQLDB lob files
我们正在使用 HSQLDB 2.3.2,我们想删除包含 LOB 数据的文件。因为它占用了大量磁盘 space.
我们已经将 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 列创建 table 并向其添加数据后,hsqldb.db.lobs
文件将以原始大小再次创建(尽管它是一个稀疏文件)。
我怀疑可以通过修改 SYSTEM_LOBS 模式中的某些 table 值来实现更多魔法。但我不认为这是一个很好的做法。
那么建议的方法是什么
- 缩小 LOB 文件使其更小(因为我们不使用数据)
- 完全删除 LOB 文件
After removing the file, the database does start correctly and seems
to run fine. And I can run queries.
此时您需要执行 CHECKPOINT 来重置 lob 表。这在 post(忽略压缩设置)中描述的解决方法之后起作用:
我们正在使用 HSQLDB 2.3.2,我们想删除包含 LOB 数据的文件。因为它占用了大量磁盘 space.
我们已经将 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 列创建 table 并向其添加数据后,hsqldb.db.lobs
文件将以原始大小再次创建(尽管它是一个稀疏文件)。
我怀疑可以通过修改 SYSTEM_LOBS 模式中的某些 table 值来实现更多魔法。但我不认为这是一个很好的做法。
那么建议的方法是什么
- 缩小 LOB 文件使其更小(因为我们不使用数据)
- 完全删除 LOB 文件
After removing the file, the database does start correctly and seems to run fine. And I can run queries.
此时您需要执行 CHECKPOINT 来重置 lob 表。这在 post(忽略压缩设置)中描述的解决方法之后起作用: