Quando ripristini un database hai tutte le informazioni in esso contenute , senza spazio vuoto tra le righe (o negli indici), a meno che non siano presenti alcune impostazioni specifiche (in pratica: FILLFACTOR
per le tabelle e FILLFACTOR
per gli indici ).
D'altra parte, quando il database è in uso da un po 'di tempo e hai avuto la tua quota di inserimenti, aggiornamenti ed eliminazioni, apparirà spazio libero inutilizzato . Ciò è dovuto al modo in cui PostgreSQL e Multiversion Concurrency Control, ovvero MVCC, funzionano. MVCC consente meno blocchi, il che significa sostanzialmente che risparmi tempo . Ma paghi un prezzo in termini di spazio :
- Ognuno
UPDATE
equivale a un INSERT
insieme a a DELETE
, con il sovraccarico (almeno in termini di spazio utilizzato) associato ad entrambi.
- Quando si dispone di più operazioni in esecuzione, e ognuno è
INSERT
ing, UPDATE
ing o DELETE
ing, si ha contemporaneamente più copie di ogni riga coinvolti.
- Lo spazio assegnato a queste versioni di riga non verrà liberato immediatamente dopo il commit e per un po 'sarà spazio inutilizzato all'interno dei file in cui sono archiviati i dati della tabella (e gli indici).
Autovacuum si occupa di rendere questo spazio riutilizzabile di default, oppure potresti avere una procedura specifica per l' aspirazione di routine .
Questo fatto può già spiegare il cambiamento di dimensione.
Probabilmente si sono verificate anche ottimizzazioni tra le versioni; e può spiegare ulteriori miglioramenti. Potrebbero anche essere state apportate ottimizzazioni per la velocità e non per le dimensioni, e le dimensioni effettive potrebbero effettivamente aumentare da una versione all'altra. Davvero non conosco i dettagli per poterlo dire; sebbene il commento di @Erwin affermi che entrambe le modifiche che fanno restringere le tue tabelle e quelle che fanno gonfiare (crescere) le tue tabelle sono avvenute dalla versione 8.3.
Per distinguere tra i due effetti, se sei curioso, potresti semplicemente, come suggerisce @ Jack Douglas, ripristinare il tuo database su 8.3. Molto probabilmente si ridurrà di dimensioni. Se si riduce a meno di 151 MB (una dimensione inferiore a quella ottenuta con la versione 9.4), la rimozione dello spazio inutilizzato ha ridotto il tuo DB e la modifica della versione ha effettivamente fatto crescere il tuo DB.
Per una migliore comprensione di MVCC, guarda la presentazione di Bruce Momjian .