同时连接到 HSQLDB - 调用永远不会返回
Posted
技术标签:
【中文标题】同时连接到 HSQLDB - 调用永远不会返回【英文标题】:Simultaneous connection to HSQLDB - the call never returns 【发布时间】: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
引擎正确。
它需要一段时间才能刷新,我可能会丢失数据。出于性能原因,我不使用日志。
【参考方案1】:
您可以在有其他打开的连接时执行 CHECKPOINT。执行 CHECKPOINT 的连接在锁定数据库并执行检查点之前等待所有其他连接提交。
因此您必须在执行检查点之前完成所有操作并提交。
【讨论】:
谢谢。看来如果把这些操作分成2个线程,就可以避免这个问题了。以上是关于同时连接到 HSQLDB - 调用永远不会返回的主要内容,如果未能解决你的问题,请参考以下文章
xmppStreamDidConnect 永远不会在 Swift 中被调用