pgactive 멤버 간의 복제 지연 측정
다음 쿼리를 사용하여 pgactive
멤버 간의 복제 지연을 볼 수 있습니다. 모든 pgactive
노드에서 이 쿼리를 실행하면 전체 상황을 파악할 수 있습니다.
app=> SELECT * FROM pgactive.pgactive_get_replication_lag_info();
│-[ RECORD 1 ]--------+---------------------------------------------
│node_name | node2-app
│node_sysid | 7481018224801653637
│application_name | pgactive:7481018224801653637:send
│slot_name | pgactive_16385_7481018224801653637_0_16385__
│active | t
│active_pid | 783486
│pending_wal_decoding | 0
│pending_wal_to_apply | 0
│restart_lsn | 0/2108150
│confirmed_flush_lsn | 0/2154690
│sent_lsn | 0/2154690
│write_lsn | 0/2154690
│flush_lsn | 0/2154690
│replay_lsn | 0/2154690
│-[ RECORD 2 ]--------+---------------------------------------------
│node_name | node1-app
│node_sysid | 7481018033434600853
│application_name | pgactive:7481018033434600853:send
│slot_name | pgactive_16385_7481018033434600853_0_16385__
│active | t
│active_pid | 783488
│pending_wal_decoding | 0
│pending_wal_to_apply | 0
│restart_lsn | 0/20F5AD0
│confirmed_flush_lsn | 0/214EF68
│sent_lsn | 0/214EF68
│write_lsn | 0/214EF68
│flush_lsn | 0/214EF68
│replay_lsn | 0/214EF68
최소한 다음 진단을 모니터링합니다.
- 활성화
-
활성이 false이면 알림을 설정합니다. 이는 슬롯이 현재 사용 중이 아님을 나타냅니다(구독자 인스턴스가 게시자와 연결 해제됨).
- pending_wal_decoding
-
PostgreSQL의 논리적 복제에서 WAL 파일은 이진 형식으로 저장됩니다. 게시자는 이러한 WAL 변경 사항을 디코딩하고 논리적 변경(예: 삽입, 업데이트 또는 삭제 작업)으로 변환해야 합니다.
지표 pending_wal_decoding은 게시자 측에서 디코딩 대기 중인 WAL 파일 수를 보여 줍니다.
이 수는 다음과 같은 요인으로 인해 증가할 수 있습니다.
-
구독자가 연결되지 않은 경우 활성 상태는 false이고 pending_wal_decoding은 증가합니다.
-
슬롯이 활성 상태이지만 게시자가 WAL 변경 볼륨을 따라갈 수 없습니다.
-
- pending_wal_to_apply
-
지표 pending_wal_apply는 구독자 측에서 적용 대기 중인 WAL 파일 수를 나타냅니다.
몇 가지 요인으로 인해 구독자가 변경 사항을 적용하지 못하고 다음과 같은 디스크 전체 시나리오가 발생할 수 있습니다.
-
스키마 차이 - 예를 들어 샘플이라는 테이블의 WAL 스트림이 변경되었지만 해당 테이블이 구독자 측에 없는 경우
-
프라이머리 키 열의 값이 업데이트됨
-
보조 고유 인덱스로 인해 데이터 분산이 발생할 수 있음
-