Tôi sẽ nói bên ngoài giao dịch. Chắc chắn trong PostgreSQL, VACUUM được thiết kế để loại bỏ các bộ "chết" (tức là hàng cũ khi một bản ghi đã bị thay đổi hoặc bị xóa.)
Nếu bạn đang chạy VACUUM trong một giao dịch có bản ghi sửa đổi, những hàng đã chết này sẽ không được đánh dấu để xóa.
Tùy thuộc vào loại VACUUM bạn đang làm, nó cũng có thể yêu cầu khóa bảng sẽ chặn nếu có các giao dịch khác đang chạy, vì vậy bạn có khả năng kết thúc trong tình huống bế tắc (giao dịch 1 bị chặn đang chờ khóa bảng để thực hiện VACUUM, giao dịch 2 bị chặn chờ đợi một hàng được phát hành mà giao dịch 1 đã bị khóa.)
Tôi cũng khuyên rằng điều này không được thực hiện trong một ứng dụng (có thể là một tác vụ theo lịch) vì có thể mất một lúc để hoàn thành và có thể ảnh hưởng xấu đến tốc độ của các truy vấn khác.
Đối với SQL Server, không có VACUUM - những gì bạn đang tìm kiếm bị thu nhỏ. Bạn có thể bật tự động thu nhỏ vào năm 2005 sẽ tự động lấy lại không gian khi máy chủ quyết định hoặc phát hành một câu lệnh DBCC để thu nhỏ cơ sở dữ liệu và tệp nhật ký, nhưng điều này phụ thuộc vào thường trình và chiến lược sao lưu của bạn trên một cấp cơ sở dữ liệu.
Nguồn
2010-02-12 08:39:53
Nó được thực hiện sau quá trình đồng bộ hóa di động.Giao dịch trước thực hiện rất nhiều sửa đổi trên cơ sở dữ liệu. Vì điều này được thực hiện trên thiết bị di động, tôi cần phát hành VACUUM để nén cơ sở dữ liệu. – Pentium10