我在neo4j 2.1.7上运行简单查询 我正在尝试执行该查询:
MATCH(a:来电者) - [:MADE_CALL
] - (c:致电) - [:RECEIVED_CALL
] - (b:接收者)CREATE(a) - [:CALLED] - &gt ;(b)返回a,b
当查询正在执行时,我收到以下错误
与Neo4j断开连接。请检查电源线是否已拔下。
然后是另一个错误:
超出GC开销限额
我正在使用16G的RAM工作在Windows Server 2012上,这是我的nodes.properties文件:
**
`neostore.nodestore.db.mapped_memory=1800M
neostore.relationshipstore.db.mapped_memory=1G
#neostore.relationshipgroupstore.db.mapped_memory=10M
neostore.propertystore.db.mapped_memory=500M
neostore.propertystore.db.strings.mapped_memory=250M
neostore.propertystore.db.arrays.mapped_memory=10M
cache_type=weak
keep_logical_logs=100M size**`
和我的neo4j-community.vmoption文件:
**
-Xmx8192
-Xms4098
-Xmn1G
-include-options ${APPDATA}\Neo4j Community\neo4j-community.vmoptions**
我有6 128 644个节点,6 506 355个关系和10 488 435个属性
任何解决方案?
答案 0 :(得分:1)
TL; DR:Neo4j已断开连接,因为您的查询效率太低。解决方案是改进查询。
由于查询的计算密集程度,您的Neo4j实例似乎已超时并经历了GC转储。使用bash shell初始化Neo4j数据库时,可以选择配置某些JVM变量,其中包括Neo4j可用的内存量和堆大小。如果查询超出这些计算限制,Neo4j会自动终止查询,进行GC转储并断开连接。
查看您在数据库中提供的信息,有6M节点具有6M关系。考虑到您的查询主要查找从6M节点的呼叫者到接收者的所有路径,然后尝试执行批量写入操作,Neo4j崩溃/断开连接并不奇怪。我建议找到一种方法来限制查询(即使使用简单的LIMIT关键字)并运行多个较小的查询来完成工作。