RJDBC - Memory-Limit

... zu anderer statistischer Software, zu Datenbanken und Programmiersprachen.

Moderatoren: EDi, jogo

R007

RJDBC - Memory-Limit

Beitrag von R007 »

Hallo,

ich nutze das Paket "RJDBC" zum Import von Daten aus einer Datenbank. Das funktioniert bei kleineren Datenmengen einwandfrei, bei größeren (>1 Mio Sätze) erhalte ich jedoch den folgenden Fehler:

Error in .jcall(rp, "I", "fetch", stride, block) :
java.lang.OutOfMemoryError: GC overhead limit exceeded

Mein Code lautet:

Code: Alles auswählen

dbGetQuery(conn,"select * from...")
Wenn ich probiere den Java-Parameter zu erhöhen, dann erhalte ich einen Java heap space Fehler.

Code: Alles auswählen

options(java.parameters = "-Xmx4g")
Kennt ihr eine Lösung für das "limit-Problem"?

Gruß
R007
consuli
Beiträge: 479
Registriert: Mo Okt 10, 2016 8:18 pm

Re: RJDBC - Memory-Limit

Beitrag von consuli »

Versuch es mal mit einer anderen Datenbank im Hintergrund. Paket dbconnect oder so ähnlich.
Irmgard.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: RJDBC - Memory-Limit

Beitrag von bigben »

---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
R007

Re: RJDBC - Memory-Limit

Beitrag von R007 »

Genau das hatte ich ja mit 4GB ausprobiert, jedoch bekam ich dann einen Java heap Size Fehler. Aber ich probiere das morgen nochmal mit den 8GB. Den Aufruf des Statements habe ich auch vor den Aufruf des Package geschrieben.

Die Datenbank im Hintergrund kann ich leider nicht austauschen.

Wär es ggf. auch eine Lösung das Paket "RODBC" statt "RJDBC" zu nutzen?
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: RJDBC - Memory-Limit

Beitrag von bigben »

Auch die Empfehlung habe ich vorhin im Netz gelesen - es wurde aber nicht aufgelöst, ob es geholfen hat.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
R007

Re: RJDBC - Memory-Limit

Beitrag von R007 »

Mittels dem Paket RODBC hat es funktioniert! Jedoch erhalte ich jetzt bei Tabellen mit einer Vielzahl an Spalten den folgenden Fehler:

"Error cannot allocate vector of size..."

Dasheißt doch, dass der Arbeitsspeicher zu klein ist, um das Objekt zu speichern bzw. um die nächste Operationen durchzuführen?

Ich probiere das Ergebnis jetzt auf Festplatte auszulagern, anstatt in den Arbeitsspeicher zu laden. Hierzu habe ich das Paket "ff" gefunden, welches ich testen werde. Kennt ihr noch andere Pakete die ich mir angucken könnte oder ggf. vllt. eine andere Lösung?
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: RJDBC - Memory-Limit

Beitrag von bigben »

Na ja den Task View dazu hatte ich Dir ja im anderen Thread schon verlinkt. Vielleicht kommt da auch das ff schon her? Bei TaskView Empfehlungen würde ich eine gewisse Ausgereiftheit erwarten.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: RJDBC - Memory-Limit

Beitrag von jogo »

R007 hat geschrieben:Mittels dem Paket RODBC hat es funktioniert! Jedoch erhalte ich jetzt bei Tabellen mit einer Vielzahl an Spalten den folgenden Fehler:

"Error cannot allocate vector of size..."

Das heißt doch, dass der Arbeitsspeicher zu klein ist, um das Objekt zu speichern bzw. um die nächste Operationen durchzuführen?
genau
http://stackoverflow.com/questions/1091 ... ze-75-1-mb

es gilt:

Code: Alles auswählen

library("fortunes")
fortune(192)
d.h. die einfachste Lösung ist (falls möglich) der Einsatz von mehr RAM. Alle anderen Lösungen erfordern weitere, nichttriviale Ideen.

Gruß, Jörg
R007

Re: RJDBC - Memory-Limit

Beitrag von R007 »

Das ff-Package habe ich über den Task View nicht gefunden, da ich dort kein passendes Thema gefunden habe. Aber ich habe dort gesucht! ;)

Auch bei diesem Package erhalte ich die gleiche Fehlermeldung, jedoch läuft es bei kleineren Daten-Scheiben problemlos durch. Wenn ich das Paket richtig verstanden habe, speichert es die Daten für jede Variable in einer ff-Datei lokal im Temp-Ordner. Das funktioniert problemlos, da ich hier nicht so begrenzt bin wie bei meinem Arbeitsspeichert.

Anschließend weise ich die Ergebnisse einer Variablen zu und dort erhalte ich die Fehlermeldung, was ich noch nicht ganz verstehe. Denn hier kommt der Arbeitsspeicher wieder in Spiel.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: RJDBC - Memory-Limit

Beitrag von EDi »

die einfachste Lösung ist (falls möglich) der Einsatz von mehr RAM.
Sehe das genauso. 32GB Ram kosten heutzutage nimmer viel.

Alternativ, kann man auch in die Cloud auslagern (muss man aber die Kosten im Auge behalten und rechnen wie oft man das braucht. Für einen einmaligen Job sicher am einfachsten und kostengünstigsten).

Z.b. bekommt man bei amazon eine x1.32xlarge Maschine mit 128 (virtuellen) Kernen 1952GB (!) RAM und 2 x 1,920 GB SSD für schlappe $18.674 pro Stunde (in Frankfurt).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten