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

标签 java quartz-scheduler hsqldb

我正在使用quartz 2.2.1以及HSQLDB 2.3.2和2.3.3(我已经尝试过它们)。

我有 1 个 quartz 作业和 16 个 quartz 触发器。触发器非常频繁地触发(假设每秒一次) 当触发器触发quartz时,向数据库发送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 文件总是在增加其大小……这在不间断的环境中是一个大问题…… 通过这 1 个作业和 16 个触发器,执行 3-5 天后,.lobs 文件的大小达到 8GB(并且还在增长)

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

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

非常感谢

最佳答案

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

CHECKPOINT DEFRAG

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

SHUTDOWN COMPACT

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

另请参阅:

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

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

关于java - Quartz Scheduler +HSQLDB 巨大的 .lobs 文件。尺寸永远增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30439140/

相关文章:

java - 'a'时间一个端口可以处理多少个请求

java - 将图像文件从内部存储加载到 arrayList 中

java - 将参数数组传递给 Quartz Scheduler

java - 如何在 Quartz 中对失败的作业进行排队?

java - 单元测试引发 : HsqlException user lacks privilege or object not found: ROWNUM

Java为参数分配一个新值,这被认为是一种不好的做法吗?

java - Netbeans部署Enterprise Application时不将类库jar打包到ear文件

java - quartz 发射两次 bean 缓存问题?

database - 我可以在单个连接上创建支持多个数据库事务吗?

mysql - 列名和撇号