Neo4j 3.0.1分离删除挂起
尝试为每月清除操作清除一种类型的节点。运行:Neo4j 3.0.1分离删除挂起,neo4j,Neo4j,尝试为每月清除操作清除一种类型的节点。运行: MATCH (s:SeriesData) DETACH DELETE s 大约有900000个节点需要删除,每个节点只有一个关系。在Windows 10、Intel i7处理器、fast SSD和32GB RAM上运行本地DB。每个节点都很小,只有一个UID和一个float属性。 Neo4j消耗了超过90%的CPU,RAM缓慢增长到10GB以上。此状态保持不变超过20分钟,并且从未完成。没有给出错误。我假设这是一个bug,因为数据库可以处理数十亿个
MATCH (s:SeriesData) DETACH DELETE s
大约有900000个节点需要删除,每个节点只有一个关系。在Windows 10、Intel i7处理器、fast SSD和32GB RAM上运行本地DB。每个节点都很小,只有一个UID和一个float属性。
Neo4j消耗了超过90%的CPU,RAM缓慢增长到10GB以上。此状态保持不变超过20分钟,并且从未完成。没有给出错误。我假设这是一个bug,因为数据库可以处理数十亿个节点,所以删除900k应该是一项简单的任务
关于这个问题有什么想法吗。我知道我可以用一个LIMIT子句将它分解成块,但我更愿意保持代码的整洁。Neo4j是否具有用于删除的定期提交功能?如果您使用的是Neo4j 3.0,请查看。有一个过程为您提供定期提交功能:
CALL apoc.periodic.commit("
MATCH (s:SeriesData)
WITH s LIMIT {num}
DETACH DELETE s
RETURN count(*)", {num: 1000})
临时事务状态的内存不足 确保配置了足够的堆,您可以检查debug.log它实际使用了多少堆吗 对于1M节点+1M rels,大约4G-8G就足够了 您还可以通过运行以下命令来计算实际删除的数量:
MATCH (s:SeriesData)
RETURN sum(size((s)--()) + 1) as nodes_and_rels
我没有运行库,但我已经复制了这个功能,它工作了。性能低于预期,但确实完成了删除操作。我运行了10000次批量删除。我运行了这个查询,它返回了大约9000000条数据,对于900000条大约20字节长的记录和一个关系来说,这似乎太低了。