Postgresql Thu hồi dung lượng sau khi delete dữ liệu như thế nào?

Việc xóa dữ liệu từ một bảng trong PostgreSQL không nhất thiết làm giảm dung lượng của bảng ngay lập tức. Dưới đây là một số nguyên nhân khiến dung lượng bảng không giảm sau khi xóa dữ liệu:

  1. Tính chất MVCC (Multi-Version Concurrency Control): PostgreSQL sử dụng cơ chế MVCC để quản lý transaction và versioning dữ liệu. Khi dữ liệu được xóa, PostgreSQL không giải phóng ngay lập tức không gian trống trên đĩa, mà chỉ đánh dấu các hàng đã bị xóa là không còn hiệu lực nữa. Dữ liệu này sẽ vẫn tồn tại trong bảng nhưng không được hiển thị trong kết quả truy vấn.
  2. Không thực sự giải phóng không gian: PostgreSQL có thể không giải phóng không gian trống trên đĩa ngay lập tức sau khi xóa dữ liệu. Thay vào đó, không gian trống này có thể được sử dụng lại cho các dòng mới sau này.

Như vậy khi chúng ta thực hiện lệnh delete thì dung lượng của tab1 không giảm ngay tức thì.

Ví dụ: tạo bảng, insert data và thực hiện xoá sau đó kiểm tra.

Tạo bảng:

create table tab2 (id int, data1 text);

Insert data:

INSERT INTO tab2 (id, data1)

SELECT 111, ‘chxhcnvn’

FROM generate_series(1, 1000000);

commit;

Kiểm tra dung lượng:

du -lh

word image 1877 1

Xoá data:

delete from tab2;

duongdb=# delete from tab2;

DELETE 1000000

Kiểm tra dung lượng:

du -lh

word image 1877 2

=> dung lượng vẫn nguyên chưa giảm chút nào???

Thực hiện thu hồi dọn dẹp:

VACUUM FREEZE tab2;

VACUUM full tab2;

VACUUM VERBOSE tab2;

Kiểm tra dung lượng:

du -lh

word image 1877 3

 

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận