Reduzieren Sie die Größe der mysteriösen Haupt-/Basisansammlung

Reduzieren Sie die Größe der mysteriösen Haupt-/Basisansammlung

Ich verwende PostgreSQL 9.3. Ich hatte eine lang andauernde Abfrage, bei der etwa 8 Millionen Zeilen aktualisiert wurden. Irgendetwas ist offensichtlich schiefgelaufen. Zwei Tage später erhielt ich eine Warnung wegen zu wenig Speicherplatz. Ich habe die Abfrage gestoppt und das hier ist, was ich gesehen habe.

root@server:/var/lib/postgresql/9.3/main# du -BM * | sort -n
1M  global
1M  pg_notify
1M  pg_serial
1M  pg_snapshots
1M  pg_stat
1M  pg_stat_tmp
1M  pg_tblspc
1M  pg_twophase
1M  PG_VERSION
1M  pg_xlog/archive_status
1M  mydb.opts
1M  mydb.pid
3M  pg_subtrans
7M  base/1
7M  base/12030
7M  base/12035
11M base/22029472
21M pg_clog
72M pg_multixact/offsets
315M    pg_log
444M    pg_multixact/members
516M    pg_multixact
625M    pg_xlog
3493M   base/pgsql_tmp
61851M  base/22053373
65372M  base

Beachten Sie Folgendes:61851M base/22053373

Da sich meine eigentlichen Daten in Tablespaces befinden, die auf unterschiedlichen Datenträgern gespeichert sind, gehe ich davon aus, dass sich hier temporäre Transaktionsdaten angesammelt haben.

Es gibt einige Online-Beiträge zu ähnlichen Problemen, aber ich habe keine allgemeingültige Lösung gefunden. Im Allgemeinen lautet der Ratschlag: „Führen Sie VACUUM FULL aus“, und manchmal verschwindet der angesammelte Datenmüll. Das mache ich jetzt, aber es dauert seine Zeit und ich habe Angst, dass ich den verbleibenden Speicherplatz (3 GB) aufbrauche und alles zum Absturz bringe.

Hat jemand Erfahrung damit? Was ist hier gespeichert? Gibt es eine sichere Möglichkeit, diesen Speicherplatz schnell freizugeben? Oder ihn zumindest woanders hin zu verschieben (ich habe viel Platz auf meinen Tablespace-Festplatten).

Antwort1

Ich habe es herausgefunden. Es ist mein Fehler. Dies ist eine neue Datenbank, die ein Kollege im Standardtabellenbereich erstellt hat, statt in einem unserer benutzerdefinierten.

Für diejenigen, die ähnliche Probleme haben, hier ein paar Dinge, die ich bei der Untersuchung gelernt habe. base/22053373In meinem Fall handelt es sich um eine Datenbank. So können Sie sehen, um welche Datenbank es sich handelt:

SELECT oid, * FROM pg_database

Jede Datei darin ist nach einem OID eines PG-Typs (Tabelle oder etwas anderes) benannt. Die größten Dateien stammen wahrscheinlich aus Ihren größten Tabellen. Stellen Sie eine Verbindung zur Datenbank her und wählen Sie aus pg_classder Sammlung aus, um herauszufinden, welche.

Im Moment verschiebe ich die Datenbank in einen benutzerdefinierten Tablespace mit

ALTER DATABASE mydb SET TABLESPACE mytablespace;

Ich bin ziemlich sicher, dass dies mein Problem lösen wird.

verwandte Informationen