我在 Windows Server 2012 r-2 上运行的 24GB 虚拟机中的 2.4 GHz Xeon 4 核(具有 8 个线程)CPU 上安装了 Neo4J 3.0.6 CE。
它通过 REST 调用申请贷款和登录应用程序的客户端详细信息进行频繁(大约每秒 1-5 次)更新,运行良好。目前总存储大小为 18.48 GiB,包含 46,741,582 个关系、68,627,444 个属性和 5,360,756 个节点。
最近,我想通过此调用删除包含在大约 12m 行的 CSV 中的一系列关系:
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'FILE:///ClientCallLogs.csv' AS line
WITH line
MATCH (c:Client {AtlasId: line.AtlasId})
-[ud:`used deviceid`]->
(devID:DeviceId {DID:line.DeviceId})
DELETE ud
在此调用之前,我在 Client 和 DeviceId 上定义了 indeces,如下所示:
CREATE INDEX ON :Client(AtlasId)
和
CREATE INDEX ON :DeviceId(DID)
改变
USING PERIODIC COMMIT 1000 to USING PERIODIC COMMIT 100
没有明显的效果。
然而,这个调用开始得很好,但很快 CPU 就用尽了,不久之后 Neo4J 进程变得无响应并开始在进一步的 REST 调用上抛出异常。唯一的补救措施是杀死并重新启动服务器,之后一切都恢复正常。
我应该改变什么?