Khi bạn khôi phục cơ sở dữ liệu, bạn có tất cả thông tin trên đó , không có khoảng trống giữa các hàng (hoặc trong các chỉ mục), trừ khi có một số cài đặt cụ thể (về cơ bản: FILLFACTOR
cho các bảng và FILLFACTOR
cho các chỉ mục ).
Mặt khác, khi cơ sở dữ liệu của bạn đã được sử dụng một thời gian và bạn đã chia sẻ các phần chèn, cập nhật và xóa, không gian không sử dụng miễn phí sẽ xuất hiện . Điều này là do cách PostgreSQL và Multiversion Concurrency Control, hay còn gọi là MVCC hoạt động. MVCC cho phép khóa ít hơn, về cơ bản có nghĩa là bạn tiết kiệm thời gian . Nhưng bạn phải trả giá về mặt không gian :
- Mọi thứ đều
UPDATE
tương đương với INSERT
cùng với a DELETE
, với chi phí chung (ít nhất là về mặt không gian được sử dụng) liên kết với cả hai.
- Khi bạn có một vài giao dịch đang chạy và mỗi giao dịch đang diễn
INSERT
ra, UPDATE
ing hoặc DELETE
ing, bạn có đồng thời một vài bản sao của mỗi hàng liên quan.
- Không gian được phân bổ cho các phiên bản hàng này sẽ không được giải phóng ngay sau khi cam kết và trong một thời gian, sẽ là không gian không được sử dụng trong các tệp nơi dữ liệu bảng (và chỉ mục) của bạn đang được lưu trữ.
Autovacuum chăm sóc không gian này được sử dụng lại theo mặc định hoặc bạn có thể có một số quy trình cụ thể để hút bụi thường xuyên .
Thực tế này đã có thể giải thích sự thay đổi kích thước.
Tối ưu hóa giữa các phiên bản có lẽ cũng đã diễn ra; và có thể giải thích những cải tiến hơn nữa. Tối ưu hóa cũng có thể đã được thực hiện cho tốc độ chứ không phải kích thước, và kích thước thực tế có thể thực sự phát triển từ phiên bản này sang phiên bản tiếp theo. Tôi thực sự không biết chi tiết cụ thể để có thể nói; mặc dù nhận xét từ @Erwin nói rằng cả hai thay đổi làm cho bảng của bạn co lại và thay đổi làm cho bảng của bạn phình to (tăng trưởng) đã diễn ra kể từ phiên bản 8.3.
Để phân biệt giữa hai hiệu ứng, nếu bạn tò mò, bạn có thể, như @Jack Douglas gợi ý, khôi phục cơ sở dữ liệu của bạn vào ngày 8.3. Nó có thể sẽ thu nhỏ kích thước. Nếu nó co lại dưới 151 MB (kích thước nhỏ hơn những gì bạn nhận được với phiên bản 9,4), thì việc loại bỏ không gian không sử dụng đã khiến DB của bạn co lại và thay đổi phiên bản thực sự khiến DB của bạn phát triển.
Để hiểu rõ hơn về MVCC, hãy xem bài thuyết trình của Bruce Momjian .