当实例有 64GB 时,Neo4j Aura (GCP) 内存限制为 18.7 GiB

问题描述 投票:0回答:1

在 Neo4j Aura (GCP) 上,我收到此错误:

Neo.TransientError.General.MemoryPoolOutOfMemoryError 额外 2.0 MiB 的分配将使用超过限制 18.7 吉布。目前使用 18.7 GiB。 dbms.内存.事务.total.max 达到阈值

实例配置为:

Neo4j 版本 5 内存 64GB 存储空间 128GB 中央处理器12 美国俄勒冈地区 (us-west1)

这东西花费了一大笔钱,所以令人失望的是我无法通过查询引用所有内存。这是我的查询:

CALL apoc.periodic.iterate("MATCH (st:ConsumerID)-[r:`ConsumerID->ProspectID` | `ProspectID->ConsumerID`]-(n1)-[r2]-(n2)-[r3]-(n3)-[r4]-(n4)-[r5]-(n5)-[:`ConsumerID->ProspectID` | `ProspectID->ConsumerID`]-(fn:ConsumerID)
WHERE id(st) <> id(fn) AND st.SourceSystemCreatedDate >= fn.SourceSystemCreatedDate and NOT n2:ExternalCreditReportID 
RETURN r2",
"DELETE r2",{batchSize:1, parallel:false, params:{}})
YIELD batches, total RETURN batches, total;

即使减少批量大小1,或单/多线程也没有什么区别,我也尝试过这些索引:

CREATE INDEX ConsumerID_id_SourceSystemCreatedDate FOR (n:ConsumerID) ON (n.id,n.SourceSystemCreatedDate);
CREATE INDEX ConsumerID_SourceSystemCreatedDate FOR (n:ConsumerID) ON (n.SourceSystemCreatedDate);

任何想法将不胜感激。

neo4j neo4j-apoc neo4j-aura
1个回答
0
投票

4.0之后任何版本的最佳实践是不要从外部驱动查询中返回节点或关系或路径变量,而是传递它们的 id() ,并在批量查询中通过 id() reMATCH (或使用 apoc 重新绑定

https://neo4j.com/developer/kb/a-significant-change-in-apoc-periodic-iterate-in-apoc-4-0/

这是为了解决某些行为,其中驱动事务将保留对子事务的引用,这实际上会禁用您想要的批处理行为。

© www.soinside.com 2019 - 2024. All rights reserved.