【问题标题】:Simultaneous connection to HSQLDB - the call never returns同时连接到 HSQLDB - 调用永远不会返回
【发布时间】:2013-08-29 05:39:46
【问题描述】:

我将 HSQLDB 与单个 DB 和 4 个表一起使用。 我正在使用 commons apache pooled 数据源。

场景如下:

表 1-3 在一个事务中更新,因此在同一个连接上(不同的 sql 语句)。他们使用自动提交 false 并调用 executeUpdate() 和 executeBatch()。在此事务结束时,有时(不是每次)都会调用“检查点”。

表 4 与其他表同时更新,但使用另一个连接。更新批次,然后总是调用“检查点”。在这个检查点,一切都挂起,调用永远不会返回,并且无法访问该数据库中的任何表。在日志文件中,我看到第 4 个表的“检查点”永远不会到达。

当有一个使用 auto commit = false 的打开连接时,我无法执行检查点吗?

可能是死锁?

我不知道是什么问题... 没有这张表 #4 一切正常。

【问题讨论】:

  • 当你省略“检查点”时会发生什么(无论如何都不需要)
  • 没有它,其余代码似乎都在工作,我必须添加检查点,因为我希望将其插入数据库,而不是缓存。
  • HSQLDB 会在需要时将数据刷新到磁盘。只要确保你SHUTDOWN引擎正确。
  • 它需要一段时间才能刷新,我可能会丢失数据。出于性能原因,我不使用日志。

标签: java database hsqldb


【解决方案1】:

您可以在有其他打开的连接时执行 CHECKPOINT。执行 CHECKPOINT 的连接在锁定数据库并执行检查点之前等待所有其他连接提交。

因此您必须在执行检查点之前完成所有操作并提交。

【讨论】:

  • 谢谢。看来如果把这些操作分成2个线程,就可以避免这个问题了。
猜你喜欢
  • 1970-01-01
  • 2017-12-06
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 2011-12-27
相关资源
最近更新 更多