PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

wal_keep_searies tại sao lại tối thiểu, không phải tối đa?

Để trả lời trực tiếp câu hỏi của bạn, tại sao tối thiểu và tại sao không tối đa? Vì các phân đoạn WAL mới có thể phát triển nhanh hơn RemoveOldXlogFiles(_logSegNo, recptr) chức năng có thể xóa những cái cũ.

Ngoài ra, công thức tính số phân đoạn WAL có thể xảy ra trong tài liệu là sai. Tôi luôn có thêm một vài WAL ngoài checkpoint_segments + wal_keep_segments + 1 Một công thức chính xác hơn nhiều là sau:wal_keep_segments + 2 * checkpoint_segments + 1

Có một bài đăng cũ, nhưng rất hay về điều này ở đây: http://www.postgresql.org/message-id/[email protected]

Nếu bạn thực hiện nhiều lần chèn, các phân đoạn WAL của bạn sẽ phát triển nhanh hơn mức chúng có thể bị xóa. Điều này đã làm cho tôi chỉ trong tuần này. Tôi mong đợi pg_xlog duy trì kích thước tương đối ổn định. Có một quá trình lớn được chạy vào ban đêm và khi tôi đi làm vào sáng hôm sau, phiên bản postgres của tôi đã bị lỗi vì khối lượng tôi gắn để mở các WAL đó đã hoàn toàn đầy. Postgres đã lấp đầy tập, cố gắng viết nhiều WAL hơn nữa, nhưng không thể, và đột ngột qua đời. May mắn thay, chúng tôi chạy các bản sao đằng sau pgpool2.

Nếu bạn có óc tò mò, tôi khuyến khích bạn duyệt qua mã nguồn postgres. Nó khổng lồ và bằng C, nhưng các bình luận mã thực sự hữu ích. Tệp này đặc biệt thú vị khi nó đi sâu vào các sơ đồ về cách hoạt động của điểm kiểm tra và cách loại bỏ các phân đoạn WAL cũ xảy ra: https://github.com/postgres/postgres/blob/master/src/backend/access/transam/xlog.c



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psycopg2 không thể tìm thấy bất kỳ bảng nào sau khi kết nối

  2. Thông tin đăng nhập cơ sở dữ liệu vĩnh viễn của Heroku

  3. Chỉ giữ lại 5 kết quả tìm kiếm cuối cùng của người dùng trong một bảng

  4. Mảng đa chiều PostgreSQL

  5. Làm thế nào để lưu trữ một tệp pdf trong cơ sở dữ liệu postgresql bằng cách sử dụng servlet?