No space left on device bei grossem Group By, Alternativen?

Hallo zusammen

Ich stehe vor folgendem Problem. Ich habe ca. 1.5 Mio Einträge mit Personendaten für jeden Tag, d.h folgende Felder (Tag, Name, Betrag, …) . Nun möchte ganz simpel die Summe der Beträge für jede Person für ein Quartal. Die Query dazu ist simpel:

Select Tag, Name, Sum(Betrag)
From Table
Group by Tag, Name
where Tag>Quartalanfang
and Tag < Quartalende

Das Problem das ich aber habe, ist, dass Postgres mir einen No Space left on device error zurückgibt. Die Menge der Daten scheint ein Problem zu sein. Meine Frage nun, wie kann ich dieses Problem ungehen? Kann man Postgres hier z.B zwingen den Speicher wieder freizugeben? Kann ich die Abfrage umschreiben?

Nachtrag: ich benutze Postgres 9.1 lokal auf Win7

Danke für eure Hilfe.

Michael

Ja, ja, kein Weltraum links vom Gerät :wink:

Vermutlich ist Deine Platte voll.

Hi!

Danke für die schnelle Antwort. Auf der Festplatte sind noch >10GB frei. Zudem ist der reine select ja kein Schreibprozess nötig. Ich beziehe den “No Space Left” deshalb auf den Arbeitsspeicher. Bin ich da falsch gewickelt?

RAM ist hier lokal halt nur 8GB vorhanden, verstehe aber trotzdem nicht warum das nicht reichen sollte, da bei einem GROUP BY meiner Meinung nach jederzeit wieder Memory freigegeben werden könnte (kenne die genaue Implementierung halt nicht). Im Sinne von 1. Gruppe (Tag=1.1.2013, Name=Michael) summieren und dann weg aus dem Speicher für die nächste Gruppe etc.

Meine Frage also deshalb mehr: warum führt obiger Query zu einem “No Space Left” bei 8GB Ram und mehr als 10GB freien Festplattenplatz? Kann das umgangen werden? (Z.B. Durch Einstellungen am Postgres oder falls nicht, durch eine andere (elegante) Abfrage.)

Danke und Gruss
Michael

Doch. Wenn ein großes Resultat sortiert (oder gruppiert) werden muss dann passiert das auf der Platte. Bei 10GB freiem Speicher wundert mich die Meldung allerdings.

Ich beziehe den “No Space Left” deshalb auf den Arbeitsspeicher. Bin ich da falsch gewickelt?



Im Sinne von 1. Gruppe (Tag=1.1.2013, Name=Michael) summieren und dann weg aus dem Speicher für die nächste Gruppe etc.

Um die erste Gruppe zuerstmal identifizieren zu können müssen alle Datensätze gelesen werden.

Meine Frage also deshalb mehr: warum führt obiger Query zu einem “No Space Left” bei 8GB Ram und mehr als 10GB freien Festplattenplatz? Kann das umgangen werden?

Kannst Du mal ein EXPLAIN des Statements machen, da könnte man evtl. erkennen was passiert

Prima, danke, werde mir den EXPLAIN einmal ansehen.