低密度(平均接続< 5)の5000ノードのかなり小さなグラフで作業すると、neo4j 3.3.0にアップグレードする前に私が決して得なかった以下のエラーが発生します。このグラフには、900分子とその足場階層が含まれています(5レベルまで)。クエリで結果が返されない場合、CYPHERクエリの "DISTINCT"がメモリエラーの原因になりますか?
(:Molecule)<-[:substructureOf*1..5]-(:Scaffold)
Neo.TransientError.General.StackOverFlowError
There is not enough stack size to perform the current task. This is generally considered to be a database error, so please contact Neo4j support. You could try increasing the stack size: for example to set the stack size to 2M, add `dbms.jvm.additional=-Xss2M' to in the neo4j configuration (normally in 'conf/neo4j.conf' or, if you are using Neo4j Desktop, found through the user interface) or if you are running an embedded installation just add -Xss2M as command line flag.
クエリは実際には非常に簡単です。いくつかのパスが単一の足場につながる可能性があるため、クエリは実際には非常に簡単です。
match (m:Molecule) <-[:substructureOf*3]- (s:Scaffold) return distinct s limit 20
このクエリは上記のエラーメッセージを返しますが、次のクエリは機能します。
match (m:Molecule) <-[:substructureOf*3]- (s:Scaffold) return s limit 20
興味深いことに、クエリが最も深い階層のため最後の問い合わせの結果が「いいえ変更、レコードなし)」ではありません2であることを起こっこの小さなもので、非常に大きなデータベース上で動作します。
クエリにDISTINCTを追加すると、そのメモリエラーでどのように失敗しますか?それを避ける方法はありますか?分子ごとに異なる階層の深さを推測することができないからです。
私は次の値を他の投稿に示唆したように試しました。これらの #dbms.memory.heap.initial_size = 512メートル #dbms.memory.heap.max_size = 512メートル
dbms.memory.heap.initial_size=512m
dbms.memory.heap.max_size=4096m
dbms.memory.heap.initial_size=4096m
dbms.memory.heap.max_size=4096m
どれも問題に対処していません。 ご協力いただきありがとうございます。
バグのような感じです。まだ3.3.1でテストしましたか? – InverseFalcon
また、クエリに 'CYPHER 3.2'を追加するとどうなりますか? – InverseFalcon
私は3.3.1で試したことはありませんが、私は同じ問題を3.2.6としました。私は3.3.1で試してみます。 – Pierre