HSQLDB - DELETE 后自动执行 CHECKPOINT

Posted

技术标签:

【中文标题】HSQLDB - DELETE 后自动执行 CHECKPOINT【英文标题】:HSQLDB - Automatically perform CHECKPOINT after DELETE 【发布时间】:2019-05-02 01:48:14 【问题描述】:

为避免 .lob 文件增长 I understand,有必要在删除具有 LOB 列的表中的行后执行 CHECKPOINT

我尝试通过以下方式自动执行此操作:

查看文档以获取执行此操作但找不到任何选项的选项。有SET FILES LOG SIZE,但和我想要的完全不同。

像这样创建触发器:

CREATE TRIGGER MY_TRIGGER AFTER DELETE ON MY_TABLE  
  BEGIN ATOMIC  
    CHECKPOINT;  
  END

但 HSQLDB 抱怨 CHECKPOINT 不是有效令牌。

有什么建议吗?

【问题讨论】:

【参考方案1】:

HSQLDB 不允许在触发器代码中使用 CHECKPOINT 等系统命令。

已删除 LOB 的空间在检查点被释放并在以后重复使用。

您可以通过减少日志大小设置来更频繁地执行检查点。最小设置 1 会在日志大小达到 1 MB 时生成自动检查点。

SET FILES LOG SIZE 1

由于 1 MB 的已记录 DDL 语句可能会导致 .lobs 文件的大小大幅增长,因此另一种方法是对已执行的 DELETE 语句进行计数,并在计数达到阈值时从您的应用发出 CHECKPOINT。

【讨论】:

以上是关于HSQLDB - DELETE 后自动执行 CHECKPOINT的主要内容,如果未能解决你的问题,请参考以下文章

Java和HSQLDB,更新后如何自动添加列

SQLTool 退出后不提交数据 (HSQLDB)

截断需要太多时间 hsqldb

django 信号

SQLServer之创建AFETER DELETE触发器

Django 信号