MySql MemoryError

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Killver
User
Beiträge: 32
Registriert: Montag 12. Juli 2010, 17:03

Hallo!

Ich mache einige mysql calls auf meiner lokalen Datenbank von sehr großen Tabellen und erhalte jetzt immer einen MemoryError.

Irgendeine Idee wie ich das lösen kann?

lg
killver
BlackJack

@Killver: Weniger Daten abfragen? Mehr Quelltext zeigen?
Killver
User
Beiträge: 32
Registriert: Montag 12. Juli 2010, 17:03

Weniger Daten Abfragen geht nicht. Mache ich dasselbe in sqlite gibt es kein Problem.

Source hilft hier auch nix, is ne einfache mysql SELECT WHERE Abfrage.
BlackJack

@Killver: Ja aber was machst Du dann damit? Ein `fetch_all()`?
Killver
User
Beiträge: 32
Registriert: Montag 12. Juli 2010, 17:03

Ja genau ein fetch_all()
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

hm... hier steht auch so was ähnliches, also das man nicht das ganze Resultat auf einmal in der Speicher holen soll.

Mir ist gerade aber nicht ganz klar, ob es ein Fehler von MySQL an sich ist oder vom MySQLdb Modul?

Gruß, noisefloor
Killver
User
Beiträge: 32
Registriert: Montag 12. Juli 2010, 17:03

Das hab ich auch shcon gefunden. Liegt glaub ich am Mysqldb modul. WÜrde mir das überhaupt was helfen, wenn die DB lokal ist? Warum swappt python eigentlich nicht?
Killver
User
Beiträge: 32
Registriert: Montag 12. Juli 2010, 17:03

Ich habe das jetzt so probiert, wenn ich den cursor schrittweise durchgehe, anstatt ein fetchall zu machen scheint es zu funktionieren. Hoffe nur es ist dadurch nicht langsamer.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
WÜrde mir das überhaupt was helfen, wenn die DB lokal ist?
IMHO nein. Es liegt ja daran, wie MySQLdb die Daten handelt. Der Ort der DB ist egal.

Interessant wäre mal, ob dir mehr RAM helfen würden.
Hoffe nur es ist dadurch nicht langsamer.
Die ganzen Iteratoren sind in Python eigentlich sehr effizient - zumal es so wie so die empfohlene Weg ist, wenn man großen Datenmenge (egal aus einer DB oder nicht) handeln muss bzw. will.

Gruß, noisefloor
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Killver hat geschrieben:Warum swappt python eigentlich nicht?
Das ist nicht die Aufgabe von Python, sondern, wie bei der Verwendung jeder anderen Programmiersprache auch, die des Betriebssystems.
BlackJack

@Killver: Wie gross wäre denn so ein Ergebnis gewesen und wie sahen die Ergebnisse aus, so von den Datentypen und dem Umfang her?

Wie /me schon schrieb ist swappen Aufgabe des Betriebssystems und das tut das auch. Zumindest kann ich das bei meinen Python-Programmen beobachten, wenn die Daten umfamgreich genug werden.

Ich vermute mal eher Deine Daten werden so gross, dass sie nicht mehr in den virtuellen Adressraum eines Prozesses passen. Dann hilft auch kein swappen mehr.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

die genau Beschreibung des Memory Errors findet man hier. ist wohl so wie BlackJack sagt - zu großes Ergebnis.

BTW: Wo von hängt es ab, wie viel RAM ein Python-Prozess bekommt? Gibt es ein hartes oberes Limit oder ist das nur vom OS und RAM abhängig?

Gruß, noisefloor
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

noisefloor hat geschrieben:BTW: Wo von hängt es ab, wie viel RAM ein Python-Prozess bekommt? Gibt es ein hartes oberes Limit oder ist das nur vom OS und RAM abhängig?
Es ist OS-abhängig.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten