WAL trong Postgresql

Huy NguyenHuy Nguyen
2 min read

Tiếp nối bài WAL, hôm nay mình sẽ nói cụ thể hơn về WAL trong Postgesql

WAL là gì

  • Giúp khôi phục database khi Postgresql bị shutdown đột ngột

  • Các cơ sở dữ liệu đều có các khái niệm tương đương với WAL trong Postgresql, ví dụ: Transaction log (SQL Server) hay Redo log (Oracle)

Đặc điểm WAL

  • Nằm trong thư mục data/pg_wal

    Không có mô tả ảnh.

  • Kích thước mặc định của WAL file là 16MB, gọi là WAL segment. Bạn hoàn toàn có thể điều chỉnh kích thước của WAL file thông qua tham số max_wal_size.

  • Kiểm tra kích thước câu lệnh: show max_wal_size;

  • Sau khi dùng hết 16MB, postgresql lại sinh ra 1 file wal mới. Số lượng file WAL dc điều chỉnh qua tham số wal_keep_segments.

  • File WAL được thêm sau file WAL hiện tại. Mỗi file này có thêm thông tin về số thứ tự còn gọi là Log Sequence Number (LSN). LSN cũng sẽ được lưu lại trong control file mỗi khi checkpoint xảy ra.

    Không có mô tả ảnh.

Các WAL segment trong pg_wal

  • Checkpoint là 1 tiến trình trong postgresql để write toàn bộ data thay đổi từ mem xuống đĩa, đảm bảo database được nhất quán.

  • Khi cần sử dụng WAL file để khôi phục, hệ thống sẽ so sánh LSN hiện tại (VD: LSN_n) với LSN được lưu trong control file (VD: LSN_1). Nếu LSN_n > LSN_1 thì nó biết được rằng hệ thống sẽ cần phải recover bằng cách lấy các bản ghi trong WAL file từ LSN_1 đến LSN_n.

pg_control file

  • pg_control file chứa các thông tin cơ bản về checkpoint dùng cho việc phục hồi dữ liệu.

  • Các thông tin cơ bản trong pg_control là:

    • State: trạng thái của database tại thời điểm lần gần nhất checkpoint diễn ra.

    • Latest checkpoint location: LSN gần nhất tại thời điểm checkpoint

    • Latest checkpoint's REDO WAL file: file checkpoint gần nhất

  • Để kiểm tra pg_control trong postgres ở windows, có thể vào file bin rồi dùng lệnh: pg_controldata "path/to/data/folder"

    Không có mô tả ảnh.

Kiểm tra pg_control

0
Subscribe to my newsletter

Read articles from Huy Nguyen directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Huy Nguyen
Huy Nguyen

I am a software engineer with 4 years of experience in developing web applications. My expertise lies in backend development, and I have a deep interest in problem-solving, algorithms, system design, and databases. I am always eager to learn and embrace challenging projects, striving to deliver applications that exceed user expectations. I also love sharing my knowledge and learning from others to foster mutual growth and improvement