PostgreSQL 복제를 최적화하고 디버깅하기 위한 쿼리

PostgreSQL 논리 복제는 pgEdge 복제 클러스터 뒤의 전원과 구성을 제공하여 테이블을 선택적으로 복제하고 해당 테이블의 변경 사항을 더 세분화된 수준으로 복제할 수 있게 합니다. 실시간 분석, 낮은 대기 시간 또는 고 가용성을 위해 pgEdge 분산 PostgreSQL 복제를 사용하든지, 복제 구성 및 쿼리 사용을 최적화하면 성능, 일관성 및 신뢰성을 최적화할 수 있습니다.

Postgres 복제는 데이터베이스 간 데이터를 복제하는 강력한 도구입니다. 물리적 복제와 달리 논리 복제는 복제할 데이터 및 사용 방식에 대해 더 많은 제어 및 유연성을 제공합니다.

본 블로그에서는 PostgreSQL 데이터베이스의 논리 복제를 관리하기 쉽게 하는 쿼리를 탐구합니다.

Postgres 논리 복제 상태 모니터링

논리 복제 설정의 상태를 모니터링하는 것은 복제가 원활하게 실행되는지 확인하기 위한 중요한 작업입니다. pg_stat_subscription 뷰를 쿼리하여 데이터베이스의 모든 구독의 상태를 모니터링할 수 있습니다.

SQL

 

  • subname – 구독의 이름입니다.
  • state – 구독 프로세스의 상태입니다 (예: 스트리밍, catchup, 초기화).
  • sync_state – 구독의 동기화 상태입니다.
  • sent_lsn, write_lsn, flush_lsn, replay_lsn – 이러한 열은 복제 진행 상황을 나타내는 다양한 로그 시퀀스 번호(LSN)를 나타냅니다.
  • replication_delay – LSN이 작성된 후 구독자에서 적용되기까지의 지연 시간은 복제 지연을 식별하는 데 중요합니다.

이 쿼리는 논리적 복제 상태에 대한 포괄적인 개요를 제공하여 복제 지연이나 연결이 끊긴 구독자와 같은 문제를 신속하게 식별할 수 있습니다.

Postgres 복제 지연 분석

복제 지연을 분석하는 것은 복제된 데이터베이스 간의 일관성과 신선도를 유지하는 데 중요합니다. pg_replication_slots 시스템 뷰를 사용하여 게시자와 구독자 간의 복제 지연을 계산하는 데 도움이 될 수 있습니다:

SQL

 

  • slot_name – 사용 중인 복제 슬롯의 이름입니다.
  • replication_lag_bytes – 게시자의 현재 WAL 위치와 구독자가 인식하는 마지막 WAL 위치 간의 바이트 차이입니다.
  • replication_lag_time – 구독자에서 재생된 마지막 트랜잭션과 현재 시간 간의 시간 차이입니다.

이 쿼리는 논리 복제의 크기 및 시간 기반 지연을 평가하여, 지연이 허용 가능한 임계값을 초과할 경우 예방 조치를 취할 수 있도록 도와줍니다.

복제 슬롯 사용 모니터링

복제 슬롯은 논리 복제에서 중요하며, 모든 구독자가 이를 처리할 때까지 WAL 세그먼트가 유지되도록 보장합니다. 복제 슬롯의 사용 상황을 모니터링하기 위해 pg_replication_slots 뷰를 쿼리할 수 있습니다:

SQL

 

  • slot_name – 복제 슬롯의 이름입니다.
  • slot_lag_bytes – 현재 WAL 위치와 마지막 위치 간의 바이트 단위 지연입니다. 이는 슬롯에 의해 플러시된 것으로 확인된 위치까지의 거리를 의미합니다.

복제 슬롯 사용 상황을 모니터링하는 것은 WAL 세그먼트 보존과 관련된 문제를 예방하는 데 중요합니다. 이러한 문제는 발행자의 디스크 공간 고갈로 이어질 수 있습니다.

사용되지 않는 복제 슬롯 삭제

시간이 지남에 따라, 특히 구독자를 제거하거나 복제 구성을 변경한 후에는 사용되지 않는 복제 슬롯이 누적될 수 있습니다. 이러한 사용되지 않는 슬롯은 WAL 파일의 불필요한 보존을 유발하여 디스크 공간의 낭비로 이어질 수 있습니다. 다음 쿼리는 사용되지 않는 복제 슬롯을 식별하고 삭제하는 데 도움이 됩니다:

SQL

 

이 쿼리는 비활성화된 복제 슬롯을 반복하며 pg_drop_replication_slot 관리 함수를 사용하여 삭제합니다. 사용되지 않는 복제 슬롯을 정기적으로 정리하면 데이터베이스가 효율적으로 유지되고 WAL 파일 보존과 관련된 잠재적인 문제를 방지할 수 있습니다.

복제 슬롯 생성

새 논리적 복제 슬롯을 만들어야 하는 경우 다음 쿼리가 유용합니다:

SQL

 

이 쿼리는 pg_create_logical_replication_slot 함수를 사용하여 지정된 이름과 출력 플러그인(poutput을 사용하는 예시)으로 새 논리적 복제 슬롯을 생성합니다. 이 쿼리는 새로운 논리적 복제 구성을 설정할 때 유용하며, 구독자가 WAL 레코드의 올바른 지점부터 변경 사항을 수신할 수 있는지 확인하는 데 사용할 수 있습니다.

pglogical을 사용한 논리적 복제 최적화 

더 고급 논리적 복제 기능을 위해 pglogical 확장 기능을 사용하는 경우, 다음 쿼리는 모든 pglogical 구독의 상태를 확인하는 데 도움이 될 수 있습니다:

SQL

 

  • subscription_name – pglogical 구독의 이름.
  • replay_lag – 마지막으로 받은 변경 사항과 현재 시간 사이의 지연 시간.
  • pending_changes – 가입자에게 적용 대기 중인 변경 사항의 수입니다.

이 쿼리는 pglogical 구독의 상세 개요를 제공하여 복제 설정을 세밀하게 조정하고 문제를 해결하는 데 도움이 됩니다.

결론

pgEdge Distributed PostgreSQL은 클러스터 전체에서 논리적 복제를 사용하여 복제할 데이터와 해당 데이터를 저장하는 방법을 정확하게 제어할 수 있습니다. pgEdge는 데이터 복제 프로세스에 대한 세밀한 제어를 제공하는 다재다능한 도구를 개발하고 있습니다. 이 블로그에서 소개된 쿼리는 논리적 복제 클러스터를 효과적으로 모니터링, 관리 및 최적화하는 데 도움이 될 수 있습니다. 이러한 쿼리를 사용하여 데이터 일관성을 보장하고 복제 지연을 최소화하며 충돌을 방지하여 견고하고 신뢰할 수 있는 데이터베이스 환경을 유지하는 데 중요합니다.

논리적 복제 작업을 계속하면 이러한 쿼리를 정기적인 모니터링 및 유지 관리 루틴에 통합하여 PostgreSQL 데이터베이스와 pgEdge 클러스터가 최적으로 작동하도록 보장하는 것이 좋습니다.

Source:
https://dzone.com/articles/optimizing-debugging-postgresql-replication-queries