Quartz Scheduler +HSQLDB 巨大的 .lobs 文件。尺寸永远增加

Posted

技术标签:

【中文标题】Quartz Scheduler +HSQLDB 巨大的 .lobs 文件。尺寸永远增加【英文标题】:Quartz Scheduler +HSQLDB huge .lobs file. size increasing forever 【发布时间】:2015-05-25 13:07:40 【问题描述】:

我正在使用石英 2.2.1 和 HSQLDB 2.3.2 和 2.3.3(我都尝试过)。

我有 1 个石英作业和 16 个石英触发器。触发器非常频繁地触发(比如说每秒) 当触发器触发石英时,向数据库发送 DELETE 和 INSERT,而不是使用 UPDATE

从HSQLDB日志中获取的真实示例:

/*C3974*/SET SCHEMA PUBLIC

DELETE FROM QRTZ_TRIGGERS
  WHERE SCHED_NAME='monitORA' AND
  TRIGGER_NAME='CL1DEST1INF1PL1LIN7' AND
  TRIGGER_GROUP='grupoInformes'

INSERT INTO QRTZ_TRIGGERS
  VALUES('monitORA','CL1DEST1INF1PL1LIN7','grupoInformes',
         'informesSQL','group1',NULL,1432557642000,
         1432557639000,5,'ACQUIRED','CRON',
         1432556986000,0,NULL,1,978)

INSERT INTO QRTZ_FIRED_TRIGGERS
  VALUES('monitORA','monitORA11432557151496','CL1DEST1INF1PL1LIN7',
         'grupoInformes','monitORA1',1432557641149,1432557642000,
         5,'ACQUIRED',NULL,NULL,FALSE,FALSE)

SET SCHEMA SYSTEM_LOBS

DELETE FROM LOB_IDS WHERE LOB_ID=978

INSERT INTO LOB_IDS VALUES(978,121,1,30)

COMMIT

在qrtz_triggers表中有一个BLOB列,这就是为什么HSQLDB内部在LOB_IDS表中执行删除和插入......

.lobs 文件总是在增加它的大小,虽然我执行了检查点和检查点碎片整理......这在不间断的环境中是一个大问题...... 在执行 3-5 天后,有了这 1 个作业和 16 个触发器,.lobs 文件的大小增加了 8GB(并且还在增长)

为什么执行删除和插入而不是更新?

以及如何避免 .lobs 文件永远增加?

非常感谢

【问题讨论】:

一个 UPDATE 被翻译成 DELETE 和 INSERT 语句。在您报告的 .log sn-p 中没有创建新的 LOB(对 LOBS 表的更改代表实际的 lob 创建和删除)。如果应用程序保留旧记录并添加新记录,.lobs 文件将会增长。这一定是 Quartz 的工作方式。 【参考方案1】:

尝试使用管理器工具(runManager.bat 或 runManagerSwing.bat)在数据库中执行以下命令:

CHECKPOINT DEFRAG

此命令回收数据库文件中未使用的空间。 如果这还没有帮助,请尝试以下方法:

SHUTDOWN COMPACT

此命令关闭数据库,创建一个能够重新创建数据库的插入脚本,然后执行它以重新创建数据库文件,这应该从头开始创建“干净”的数据库文件。

另见:

http://hsqldb.org/doc/guide/management-chapt.html#mtc_system_operations

请注意,这些命令对于旧 HSQLDB 版本中的 lob 可能无法正常工作。

【讨论】:

以上是关于Quartz Scheduler +HSQLDB 巨大的 .lobs 文件。尺寸永远增加的主要内容,如果未能解决你的问题,请参考以下文章

quartz储存方式之JDBC JobStoreTX

打造自己的渗透测试框架—溯光

HSQLDB:REPLACE INTO 表抛出 org.hsqldb.HsqlException:完整性约束违规:

如何使用 HSQLDB API 的 org.hsqldb.jdbc.JDBCConnection 类

Hsqldb安装与使用

RazorSQL 导致 HSQLDB 抛出 org.hsqldb.HsqlException:需要大于 '2.1.0.0' 的客户端驱动程序版本。 HSQLDB 服务器版本是 '2.3.4'