创建索引时出现死锁

时间:2014-03-10 09:18:24

标签: python neo4j cypher py2neo

我尝试使用py2neo 1.6.2和neo4j 2.0.1创建一个包含Cypher查询的索引:

graph_db = neo4j.GraphDatabaseService()
query = "CREATE INDEX ON :Label(prop)"
neo4j.CypherQuery(graph_db, query).run()

查询在neo4j Web界面中运行正常,但在py2neo中抛出死锁错误:

<小时/> py2neo.neo4j.DeadlockDetectedException:不要惊慌。

已检测到并避免了死锁情况。这意味着两个或多个持有锁的事务想要等待彼此持有的锁,这将导致这些事务之间的死锁。抛出此异常而不是陷入死锁。

请参阅Neo4j手册中的死锁部分,了解如何避免此问题:http://docs.neo4j.org/chunked/stable/transactions-deadlocks.html

详细信息:'事务(15438,所有者:“qtp1927594840-9525”)[STATUS_ACTIVE,Resources = 1]无法在资源RWLock [SchemaLock]上等待,因为=&gt;交易(15438,所有者:“qtp1927594840-9525”)[STATUS_ACTIVE,Resources = 1]&lt; - [:HELD_BY] - RWLock [SchemaLock]&lt; - [:WAITING_FOR] - 交易(15233,所有者:“qtp1927594840-9503” )[STATUS_ACTIVE,Resources = 1]&lt; - [:HELD_BY] - RWLock [SchemaLock]'。


如果标签存在与否,它没有区别,请求通常会失败。

1 个答案:

答案 0 :(得分:1)

从详细信息部分中的死锁图表来看,这看起来像2.0.1中的错误。除了运行此特定查询之外,您是否正在对数据库执行任何其他操作,或者这只是启动新数据库并运行您提供的代码?

在任何情况下,由于它在Neo4j浏览器中工作,我建议交换使用事务API,因为这是浏览器使用的。 Py2neo使用此处记录的“Cypher Transactions”功能支持此功能:

http://book.py2neo.org/en/latest/cypher/#id2