Xử lý không gian đĩa đầy trong postgresql


14

Tôi có một ứng dụng web Django với phần phụ trợ postgresql 9.3.10 (ngồi trong hệ điều hành Linux). Tôi đã chạy vào lỗi toàn bộ đĩa, đến nỗi ngay cả khi tôi cố gắng cắt bớt một bảng, tôi vẫn gặp lỗi về loại:

ERROR:  could not extend file "base/30137/33186048": No space left on device
HINT:  Check free disk space.

Tôi không thể dễ dàng thêm nhiều dung lượng đĩa vào máy chủ, tôi cũng không thể xóa nội dung trên VM này. Tuy nhiên, có một số bảng là ứng cử viên để cắt ngắn, nhưng dường như bây giờ tôi cũng không thể cắt chúng.

Bất cứ ai có thể cho tôi lời khuyên về những gì tôi có thể làm ở đây? Điều này đang tác động mạnh đến máy chủ sản xuất của tôi và tôi là một DBA tình cờ ở đây, vì vậy hoàn toàn bị bối rối.


Bạn có thể lấy lại một số khoảng trống nếu bạn có thể (tạm thời) thả một chỉ mục ... cắt bớt các bảng và sau đó tạo lại nó
joanolo

Câu trả lời:


9

Vì PostgreSQL phải viết WAL trước khi thực hiện bất kỳ thay đổi nào đối với các bảng, nên nó cần dung lượng đĩa trống để xóa mọi thứ và giải phóng thêm dung lượng đĩa.

Nếu bạn để đĩa đầy, bạn không thể khôi phục từ bên trong PostgreSQL. Thậm chí TRUNCATEvẫn phải viết thư cho WAL.

Vì vậy, bạn phải giải phóng một số không gian trên âm lượng, hoặc mở rộng âm lượng. Nếu tệp nhật ký PostgreSQL của bạn nằm trongpg_log thư mục dữ liệu, bạn có thể xóa một số một cách an toàn và khởi động lại PG.

Đừng không xóa pg_xloghoặc pg_clog. Đây không phải là nhật ký lỗi máy chủ, chúng là các phần quan trọng của cơ sở dữ liệu, nhật ký giao dịch và nhật ký cam kết.


Tại sao TRUNCATEphải viết thư cho wal, và mục đó trong WAL trông như thế nào?
Evan Carroll

"cắt ngắn không ghi nhật ký đầy đủ dữ liệu, chỉ có thực tế là cắt ngắn đã xảy ra. Để có thể khôi phục lại, tệp bên dưới được giữ xung quanh cho đến khi giao dịch được cam kết." [nguồn] ( postgresql.org/message-id/... Vì vậy, mục truncate trong tường là siêu nhỏ chỉ byte Nếu đó là toàn bộ tải trọng không gian cần thiết, bạn có thể có thể có được nó bằng.. rm -rf /tmp/*hoặc xóa vimrc của bạn.
Evan Carroll

@EvanCarroll rm -rf /tmp/*... có thể xóa những thứ bạn có thể muốn, chẳng hạn như ổ cắm ứng dụng, v.v ... Tốt hơn để được chọn lọc hơn. Đối với không gian cần thiết, bạn nói đúng, nó tối thiểu - một bảng trống 8k + một vài kb mục nhập WAL cho việc cắt ngắn, phân bổ xid, bản ghi cam kết, v.v.
Craig Ringer
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.