我的图形数据库有350万个节点大小的数据库是1.6GB我试图通过neo4jshell
以下查询更新所有节点的属性.
Match (p:Person) set p.regId= toInt(p.regId) ;
Run Code Online (Sandbox Code Playgroud)
在这之前我已经在Person上添加了属性索引regId
.在执行期间,抛出以下错误
java.lang.MemoryError:超出了GC开销限制
由单个Cypher语句执行的所有更改都在同一事务中执行.事务在内存中建立,并在关闭时保持不变.
我猜你的事务在这里变得很大,因此导致内存错误.
处理此问题的常用策略是LIMIT
在cypher语句上使用具有已定义大小的内容,报告所做更改的数量并运行语句x次,直到返回值为0.
在你的情况下:
Match (p:Person)
where p.regId <> toInt(p.regId)
with p limit 10000
set p.regId= toInt(p.regId)
return count(p)
Run Code Online (Sandbox Code Playgroud)
以下是导致错误的原因的描述。基本上,您的内存不足,垃圾收集不会为您找到任何额外的可用内存。
在neo4j 性能调优指南中,有很多关于如何调整内存的指导。
首先要尝试的是给 JVM 更多内存;对于 shell,您需要JAVA_OPTS=-Xmx1024m
在启动 shell 之前进行一些设置,以调整 JVM 可以使用的内存量,这会增加堆大小。
归档时间: |
|
查看次数: |
374 次 |
最近记录: |