Wenn Sie eine Datenbank wiederherstellen, werden alle Informationen gepackt , ohne Leerzeichen zwischen den Zeilen (oder in Indizes), es sei denn, es sind bestimmte Einstellungen vorhanden (im Grunde: FILLFACTOR
für Tabellen und FILLFACTOR
für Indizes ).
Wenn Ihre Datenbank jedoch seit einiger Zeit verwendet wird und Sie Ihren Anteil an Einfügungen, Aktualisierungen und Löschungen hatten, wird freier, nicht verwendeter Speicherplatz angezeigt . Dies liegt an der Funktionsweise von PostgreSQL und Multiversion Concurrency Control, auch bekannt als MVCC . MVCC ermöglicht weniger Sperren, was im Grunde bedeutet, dass Sie Zeit sparen . Aber Sie zahlen einen Preis in Form von Raum :
- Jedes
UPDATE
entspricht einem INSERT
zusammen mit einem DELETE
, wobei der Overhead (zumindest in Bezug auf den verwendeten Platz) beiden zugeordnet ist.
- Wenn mehrere Transaktionen ausgeführt werden und jede ausgeführt
INSERT
, ausgeführt UPDATE
oder ausgeführt wird DELETE
, haben Sie gleichzeitig mehrere Kopien jeder beteiligten Zeile.
- Der diesen Zeilenversionen zugewiesene Speicherplatz wird nicht sofort nach dem Festschreiben freigegeben und für eine Weile nicht verwendeter Speicherplatz in den Dateien, in denen Ihre Tabellendaten (und Indizes) gespeichert sind.
Autovacuum sorgt dafür, dass dieser Raum standardmäßig wiederverwendbar wird, oder Sie haben ein spezielles Verfahren für das routinemäßige Staubsaugen .
Diese Tatsache kann bereits die Größenänderung erklären.
Wahrscheinlich fanden auch Optimierungen zwischen den Versionen statt. und kann weitere Verbesserungen erklären. Optimierungen könnten auch für die Geschwindigkeit und nicht für die Größe vorgenommen worden sein, und die tatsächliche Größe könnte tatsächlich von einer Version zur nächsten wachsen . Ich kenne die Einzelheiten wirklich nicht, um sie sagen zu können; Obwohl der Kommentar von @Erwin besagt, dass sowohl Änderungen, die Ihre Tabellen verkleinern, als auch Änderungen, die Ihre Tabellen aufblähen (wachsen), seit Version 8.3 vorgenommen wurden.
Um zwischen den beiden Effekten zu unterscheiden, können Sie, wenn Sie neugierig sind, einfach, wie @Jack Douglas vorschlägt, Ihre Datenbank auf 8.3 wiederherstellen. Es wird höchstwahrscheinlich kleiner. Wenn es auf weniger als 151 MB verkleinert wird (eine Größe, die kleiner ist als die Version 9.4), hat das Entfernen von nicht verwendetem Speicherplatz Ihre Datenbank verkleinert, und die Versionsänderung hat Ihre Datenbank tatsächlich wachsen lassen.
Schauen Sie sich zum besseren Verständnis von MVCC die Präsentation von Bruce Momjian an .