Phân đoạn WAL không có trong Postgres


9

Chúng tôi có cơ sở dữ liệu Postgres khối lượng tương đối thấp với lưu trữ liên tục được thiết lập để nén từng phân đoạn WAL và gửi đến S3. Bởi vì nó là một hệ thống âm lượng thấp, archive_timeoutcứ sau 10 phút lại có một hệ thống lưu trữ và không lưu trữ phân khúc WAL hầu như không được sử dụng, vốn được sử dụng để nén rất tốt vì nó chủ yếu chỉ là số không.

Tuy nhiên, Postgres tái chế các phân đoạn WAL của mình để tránh chi phí phân bổ các tệp mới tại mỗi công tắc WAL, điều này rất hữu ích trong tình huống tải cao nhưng điều đó có nghĩa là sau một loạt hoạt động nặng hơn bình thường, các tệp phân đoạn WAL của chúng tôi đã đầy rác từ các phân khúc trước và không nén rất tốt. Chúng tôi đang lưu trữ rất nhiều bản sao của tất cả những thứ linh tinh này.

Có cách nào để giảm dung lượng chúng tôi sử dụng để lưu trữ WAL không? Một số khả năng tối ưu:

  1. Ngăn chặn Postgres tái chế các phân đoạn WAL bằng cách nào đó, do đó, nó bắt đầu với một tệp zeroed mỗi lần. Các tài liệu không chỉ ra rằng có một tùy chọn để làm điều này nhưng tôi có thể đã bỏ lỡ nó.

  2. Có Postgres zero tệp phân đoạn WAL khi nó bắt đầu / kết thúc bằng cách sử dụng nó. Một lần nữa, các tài liệu dường như không đề xuất điều này là có thể.

  3. Không có bên ngoài hoặc xóa một số tệp phân đoạn WAL trong khi chúng không được sử dụng. Có cách nào an toàn để xác định đây là tập tin nào không?

  4. Không có phần không được sử dụng của phân khúc trước khi lưu trữ nó bằng cách sử dụng đầu ra từ pg_xlogdumpđể tìm nơi rác bắt đầu. Có thể, mặc dù tôi không thích nó. Ít nhất bằng cách thực hiện điều này trong lệnh lưu trữ, bạn có thể chắc chắn rằng Postgres sẽ không sử dụng lại tệp.

  5. Chỉ lưu trữ phần được sử dụng của tệp phân đoạn, một lần nữa bằng cách diễn giải đầu ra của một pg_xlogdumpcách nào đó, sau đó đệm nó bằng các số 0 trong quá trình khôi phục. Cũng có thể âm thanh mặc dù tôi không thực sự ưa thích nó.


Vấn đề thú vị. Tôi có thể hỏi bạn đang sử dụng lưu trữ liên tục để làm gì không?
dezso

@dezso Mặc dù tốc độ thấp, nhưng điều này được coi là rất quan trọng để giảm rủi ro mất bất kỳ dữ liệu nào trong khả năng có thể và có một bản kiểm tra các thay đổi được thực hiện. Lưu trữ WAL là phòng thủ cuối cùng (cũng có các cơ chế khác đang hoạt động) vì vậy giữ cho nó rẻ sẽ là tốt.
Dave Turner

Câu trả lời:


5

Bắt đầu từ phiên bản 9.4, giờ đây nó sẽ tự động thay đổi phần đuôi của tệp WAL. (Trên thực tế, nó hầu như chỉ bằng 0, có một số tiêu đề khối không bị xóa, nhưng kết quả vẫn rất dễ nén).

Trong phiên bản 9.2, có một chương trình có tên pg_clearxlogtailbạn có thể sử dụng. Bạn có thể thêm nó vào archive_command trước bước nén.

Nếu bạn đang sử dụng 9.3, bạn đã hết may mắn.

Lưu ý rằng các điểm kiểm tra vốn không gây ra chuyển đổi tệp nhật ký. Nó có thể là archive_timeout gây ra các thiết bị chuyển mạch.


Cô ơi. Vâng, chúng tôi đang ở trên 9.3, vì vậy đã trượt qua vết nứt giữa hai giải pháp đó. Và vâng, xin lỗi, bạn nói đúng, đó là archive_timeoutnguyên nhân gây ra các công tắc. Đã sửa OP, cảm ơn.
Dave Turner
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.