Umgang mit Speicherplatz voll in postgresql


14

Ich habe eine Django-Webanwendung mit dem Backend von PostGresQL 9.3.10 (unter Linux). Ich bin auf einen Festplattenfehler gestoßen. Selbst wenn ich versuche, eine Tabelle abzuschneiden, erhalte ich Fehler der folgenden Art:

ERROR:  could not extend file "base/30137/33186048": No space left on device
HINT:  Check free disk space.

Ich kann dem Server nicht einfach mehr Speicherplatz hinzufügen und auch nichts auf dieser VM löschen. Es gibt jedoch mehrere Tabellen, die für das Abschneiden in Frage kommen, aber anscheinend kann ich sie auch jetzt nicht abschneiden.

Kann mir jemand einen Rat geben, was ich hier tun kann? Dies trifft meinen Produktionsserver hart, und ich bin hier ein bisschen ein versehentlicher DBA, also total ratlos.


Sie können Speicherplatz zurückfordern, wenn Sie einen Index (vorübergehend)
löschen können

Antworten:


9

Da PostgreSQL WAL schreiben muss, bevor Änderungen an Tabellen vorgenommen werden, benötigt es freien Speicherplatz, um Dinge zu löschen und mehr Speicherplatz freizugeben.

Wenn Sie die Festplatte voll haben, können Sie in PostgreSQL keine Wiederherstellung durchführen. TRUNCATEMuss sogar noch an WAL schreiben.

Sie müssen also Speicherplatz auf dem Volume freigeben oder das Volume erweitern. Wenn sich Ihre PostgreSQL-Protokolldateien pg_logim Datenverzeichnis befinden, können Sie einige davon sicher entfernen und Pg neu starten.

Löschen Sie nichtpg_xlog oder pg_clog. Hierbei handelt es sich nicht um Serverfehlerprotokolle, sondern um wichtige Teile der Datenbank, des Transaktionsprotokolls und des Festschreibungsprotokolls.


Warum muss TRUNCATEich an wal schreiben und wie sieht dieser Eintrag in WAL aus?
Evan Carroll

"truncate protokolliert nicht die vollständigen Daten, sondern nur die Tatsache, dass ein Truncate stattgefunden hat. Um ein Rollback durchführen zu können, wird die zugrunde liegende Datei so lange gespeichert, bis die Transaktion festgeschrieben ist." [source] ( postgresql.org/message-id/… Der Eintrag von truncate in wall ist also sehr klein. Bloße Bytes. Wenn das die Gesamtmenge des benötigten Speicherplatzes wäre, könnten Sie ihn wahrscheinlich von rm -rf /tmp/*Ihrem Vimrc erhalten oder löschen.
Evan Carroll

@EvanCarroll rm -rf /tmp/*... mit dem Sie möglicherweise auch die gewünschten Elemente löschen können, z. B. Anwendungssockets usw. Besser, Sie sind selektiver. Sie haben Recht, der Platzbedarf ist minimal - eine leere 8-KB-Tabelle + ein paar KB WAL-Einträge für die Kürzung, XID-Zuordnung, Festschreibungsdatensatz usw.
Craig Ringer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.