PostgreSQL: Dung lượng ổ đĩa không được phát hành sau TRUNCATE


12

Tôi có TRUNCATEmột bảng khổng lồ (~ 120Gb) được gọi là files:

TRUNCATE files;
VACUUM FULL files;

Kích thước bảng là 0, nhưng không có không gian đĩa được phát hành. Bất kỳ ý tưởng làm thế nào để lấy lại không gian đĩa bị mất của tôi?

CẬP NHẬT: Không gian đĩa được phát hành sau ~ 12 giờ, mà không có bất kỳ hành động nào về phía tôi. Tôi sử dụng máy chủ Ubuntu 8.04.


Tôi đã đề nghị "hút bụi!", Nhưng xem xét bạn vừa làm, tôi khuyên bạn nên đưa nó vào danh sách các tin tặc hoặc hiệu suất pg (và liên kết lại với chuỗi hoặc trả lời khi bạn đã nhận được một).
Denis de Bernardy

Liên kết này ( postgresql.1045698.n5.nabble.com/ từ ) có lời khuyên nào cho bạn không? Có lẽ vẫn còn một cái gì đó truy cập vào bảng hoặc tương tự.
DrColossos

@DrColossos: Tôi đã đọc một bình luận trong nguồn (một bình luận mà tôi không thể tìm thấy ngay bây giờ) cho biết PostgreQuery đã thông báo tất cả các kết nối mà việc cắt ngắn sắp diễn ra và nó đã khóa các tài nguyên cần thiết. (Có một số, bao gồm chính bảng, chỉ mục, trình tự và bảng bánh mì nướng.) Tôi khá chắc chắn rằng tôi đã tìm thấy nhận xét trước đó bằng cách truy tìm ExecuteTruncate (), nhưng tôi không tích cực 100% về điều đó.
Mike Sherrill 'Nhớ lại mèo'

Câu trả lời:


12

Theo các bình luận trong nguồn , truncatetạo một tệp lưu trữ mới, trống và xóa tệp lưu trữ cũ tại thời điểm cam kết. (Tài liệu đề xuất "tệp lưu trữ" chỉ là một tệp có liên quan đến HĐH, nhưng tôi có thể hiểu nhầm thuật ngữ này.)

Tạo một tệp lưu trữ trống mới cho mối quan hệ và gán nó làm giá trị relfilenode. Các tập tin lưu trữ cũ được lên kế hoạch để xóa tại cam kết.

Vì nó dường như đang xóa một tập tin, tôi có thể tưởng tượng một số trường hợp trong đó hệ điều hành cơ bản có thể không giải phóng không gian đó ngay lập tức. Tôi tưởng tượng rằng trong một số trường hợp, tệp lưu trữ có thể kết thúc trong Thùng tái chế trong Windows chẳng hạn. Nhưng trong trường hợp của tôi, việc cắt bớt một bảng trong PostgreSQL 9. một cái gì đó ngay lập tức tăng quyền tự do trong Windows.

Cắt ngắn cũng được ghi lại trong nhật ký WAL. Tôi không biết có bao nhiêu tác dụng.


2
Có thể hình dung rằng một quá trình phụ trợ khác vẫn có một bộ mô tả tệp cho tệp đang mở. Nếu điều này xảy ra một lần nữa, tôi sẽ thử chấm dứt tất cả các quá trình phụ trợ khác, chỉ để xem liệu nó có tạo ra sự khác biệt hay không.
Peter Eisentraut

Tôi khá chắc chắn rằng tôi đã đọc rằng ExecuteTruncate () được cho là đảm bảo điều đó không thể xảy ra. Tất cả các phần của việc khóa các tài nguyên cần thiết để cuối cùng xóa tệp lưu trữ cũ. Nhưng tôi không biết tôi đã tìm thấy nó ở đâu trong nguồn. Tôi chỉ duyệt nó trực tuyến; Thật dễ dàng để bị lạc theo cách đó.
Mike Sherrill 'Nhớ lại mèo'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.