Ketika Anda mengembalikan database Anda memiliki semua informasi di dalamnya dikemas , tanpa ruang kosong di antara baris (atau dalam indeks), kecuali beberapa pengaturan tertentu sudah ada (pada dasarnya: FILLFACTOR
untuk tabel dan FILLFACTOR
untuk indeks ).
Di sisi lain, ketika basis data Anda telah digunakan selama beberapa waktu, dan Anda sudah memiliki bagian sisipan, pembaruan, dan penghapusan Anda, ruang kosong yang tidak digunakan akan muncul . Ini karena cara PostgreSQL dan Multiversion Concurrency Control, alias MVCC bekerja. MVCC memungkinkan penguncian lebih sedikit, yang pada dasarnya berarti Anda menghemat waktu . Tetapi Anda membayar harga dalam hal ruang :
- Setiap
UPDATE
setara dengan INSERT
bersama dengan DELETE
, dengan overhead (setidaknya dalam hal ruang yang digunakan) yang terkait dengan keduanya.
- Bila Anda memiliki beberapa transaksi berjalan, dan setiap orang yang
INSERT
ing, UPDATE
ing atau DELETE
ing, Anda harus secara simultan beberapa salinan dari setiap baris yang terlibat.
- Ruang yang dialokasikan untuk versi baris ini tidak akan dibebaskan segera setelah komit, dan untuk sementara waktu, akan ada ruang yang tidak digunakan dalam file tempat data tabel Anda (dan indeks) disimpan.
Autovacuum menangani ruang ini yang dapat digunakan kembali secara default, atau Anda dapat memiliki beberapa prosedur khusus untuk menyedot debu secara rutin .
Fakta ini sudah bisa menjelaskan perubahan ukuran.
Optimalisasi antar versi mungkin juga terjadi; dan dapat menjelaskan peningkatan lebih lanjut. Optimalisasi juga dapat dibuat untuk kecepatan dan bukan untuk ukuran, dan ukuran sebenarnya dapat tumbuh dari satu versi ke versi berikutnya. Saya benar-benar tidak tahu secara spesifik untuk bisa mengatakan; meskipun komentar dari @Erwin menyatakan bahwa kedua perubahan yang membuat tabel Anda menyusut dan perubahan yang membuat tabel Anda menggembung (tumbuh) telah terjadi sejak versi 8.3.
Untuk membedakan antara dua efek, jika Anda penasaran, Anda bisa, seperti yang disarankan @Jack Douglas, pulihkan database Anda di 8.3. Kemungkinan besar ukurannya akan menyusut. Jika menyusut menjadi kurang dari 151 MB (ukuran lebih kecil dari yang Anda dapatkan dengan versi 9.4), maka penghapusan ruang yang tidak digunakan membuat DB Anda menyusut, dan perubahan versi sebenarnya membuat DB Anda tumbuh.
Untuk pemahaman yang lebih baik tentang MVCC, lihat presentasi Bruce Momjian .