由于等待表上的事务完成,我们的一个远程部署的带有本地 derby 数据库的 Java 应用程序时不时地被锁定。每隔 24 小时,该应用程序会将这个 derby 数据库与我们庞大的预言机服务器同步,这意味着在交付其内容后,它会清除所有表,然后完全重新填充。
我打开引擎盖,发现其中一张表的 .dat 文件已将自身炸毁到 100Mb。我不确定到底需要多长时间才能达到这一点,因为当事物同步时,用户通常不在身边。直到似乎完全停止,才报告逐渐减速。我目前也不确定逻辑上如何,因为虽然自动提交已关闭,但代码似乎很紧凑。
经过一番谷歌搜索后,我认为可能发生的事情是旧事务以某种方式被遗忘,既没有提交也没有回滚 - 清除表并重新填充的未来同步基本上每次同步都会按照原始大小增长文件,因为它跟踪其整个历史回到那个老点。
有什么方法可以确认这一点和/或我是否完全走错了路?是否可以列出旧的或长期运行的交易?如果找到,我该如何清除它们并清除它们会回收磁盘空间?