Streaming replication là replication vật lý: primary ghi thay đổi vào WAL, standby mở một kết nối tới primary và nhận stream WAL liên tục, rồi replay từng record để giữ bản sao byte-level giống hệt.
Các trạng thái vị trí WAL trên standby, theo thứ tự:
- sent_lsn — primary đã gửi tới đâu.
- write_lsn — standby đã ghi vào file OS.
- flush_lsn — đã fsync xuống đĩa.
- replay_lsn — đã replay xong, tức truy vấn trên standby mới nhìn thấy tới đây.
Đo lag từ primary:
select application_name,
state,
pg_wal_lsn_diff(sent_lsn, replay_lsn) as replay_bytes
from pg_stat_replication;Đo lag tính bằng thời gian, chạy trên standby:
select now() - pg_last_xact_replay_timestamp() as replay_delay;Đồng bộ hay bất đồng bộ: mặc định là async — primary commit ngay, không chờ standby, nên có thể mất vài giao dịch cuối khi failover. Đặt synchronous_commit = on kèm synchronous_standby_names sẽ buộc commit chờ standby xác nhận: không mất dữ liệu nhưng độ trễ ghi tăng theo round-trip mạng, và nếu standby chết mà không cấu hình dự phòng thì ghi trên primary bị treo.
Nguyên nhân lag thường gặp: standby yếu hơn primary (replay là một process đơn), I/O đĩa chậm, hoặc truy vấn dài trên standby chặn replay khi bật max_standby_streaming_delay lớn.