如果未关闭事务,Neo4j数据库会被锁定。

8

我长期以来一直遇到这个问题。如果Neo4j事务没有正确关闭(提交或回滚)(这可能是由于异常,或者在事务中间死亡/退出等原因),那么Neo4j就不会释放锁定。

为了解决这个问题,我需要停止Neo4j并重新启动Neo4j。这不应该是必须的。

我查看了服务器配置,它有一个配置项org.neo4j.server.transaction.timeout=60,默认设置为60秒。因此,如果此设置默认适用于我,则在60秒超时后应该已经发生。

如何检查数据库是否被锁定?如何轻松使用代码或配置避免或删除数据库锁定?我正在使用最新的Neo4j 2.2.3。


也许您可以解释一下您如何使用Neo4j?使用哪些驱动程序和API? - Michael Hunger
1
我从未见过它被锁定。通常,如果您自己从Java代码处理事务,请确保使用try-with-resource以便每个tx都正确关闭。 - Michael Hunger
@MichaelHunger:我正在使用[PHP]语言。我在PHP中使用try catch块,并在catch中回滚事务。我还需要做些什么吗? - Somnath Muluk
1个回答

4

您需要仔细检查使用的驱动程序是否与事务Cypher端点兼容。超时只适用于此端点。

因此,我怀疑您正在使用旧的Cypher端点,该端点不支持超时。


如何检查哪个端点?我正在使用 PHP 和 Neo4j PHP 库。通过这个库,我只是将 Cypher 查询语句添加到事务中。 - Somnath Muluk
1
看源代码,卢克;-) 说真的:Neo4j有不止一个PHP库。 - Stefan Armbruster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接