2015-07-01 4 views
5

Mein Diagramm db hat 3,5 Millionen Knoten Größe der Datenbank ist 1,6 GB Ich versuche, eine Eigenschaft für alle Knoten über neo4jshell mit folgenden Abfrage zu aktualisieren.Aktualisieren einer Eigenschaft aller Knoten in Neo4j db führte zu nicht genügend Speicher

Match (p:Person) set p.regId= toInt(p.regId) ; 

Bevor Sie dies tun, ich habe für Immobilien regId Index Person hinzugefügt. Während der Ausführung wurde die folgende Fehler

java.lang.MemoryError: GC overhead limit exceeded

Antwort

1

Here is a description of what's causing the error geworfen. Im Grunde haben Sie wenig Speicher, eine Speicherbereinigung findet keinen zusätzlichen freien Speicher.

In der neo4j performance tuning guide gibt es eine Menge Anleitung, wie Sie Speicher optimieren.

Als Erstes versuchen Sie, Ihrer JVM mehr Speicher zu geben. Für die Shell müssen Sie so etwas wie JAVA_OPTS=-Xmx1024m vor dem Start der Shell setzen, um zu optimieren, wie viel Speicher die JVM verwenden kann, dies erhöht die Größe des Heapspeichers.

+0

Die maximale Heap-Größe, die ich in conf/wrapper-conf.properties gesetzt habe, ist 10GB. Es war nur mit etwa 4 GB, wenn es mir den Fehler – ger

5

Alle Änderungen, die von einer einzelnen Cypher-Anweisung ausgeführt werden, werden in derselben Transaktion ausgeführt. Eine Transaktion wird im Speicher aufgebaut und bleibt beim Schließen erhalten.

Ich vermute, dass Ihre Transaktion hier zu groß wird und daher zu einem Speicherfehler führt.

Die übliche Strategie damit umgehen ist LIMIT auf der Chiffre-Anweisung zu verwenden, um eine definierte Größe zu haben, berichtet die Anzahl der Änderungen vorgenommen zurück und die Aussage x-mal ausgeführt, bis der Rückgabewert 0.

ist in Ihr Fall:

Match (p:Person) 
where p.regId <> toInt(p.regId) 
with p limit 10000 
set p.regId= toInt(p.regId) 
return count(p) 
+1

warf Sie können in der Regel bis zu einer Million Updates pro Transaktion ohne zu viel Mühe tun, nur testen Sie es durch Festlegen der Grenze auf 1000000. –

+0

Ich vergaß zu erwähnen, die Größe des Heap seine 10GB . Was wäre die erwartete Zeit, wenn genügend Speicher vorhanden ist? ein paar Minuten? Horus? Abfrage in der Diskussion ging für mehr als 45 Minuten, bevor der Speicher – ger

+0

leer ist schwer zu sagen, ohne die vollständigen Details wie OS, IO-Subsystem, Cache-Nutzung. –