9.6 이전 PostgreSQL 버전의 복제 지연 모니터링 사용 설정

이 페이지에서는 9.6 이전의 PostgreSQL 버전을 실행하는 소스 인스턴스에서 PostgreSQL용 AlloyDB로 마이그레이션할 때 복제 지연 모니터링을 사용 설정하는 방법을 설명합니다. 전체 소스 데이터베이스 구성 안내는 소스 데이터베이스 구성을 참조하세요.

9.6 이전 PostgreSQL 버전을 실행하는 소스 인스턴스의 경우 수퍼유저가 아닌 사용자는 pg_stat_replication 뷰의 복제 통계에 액세스할 수 없으므로 복제 지연 측정항목을 기본적으로 사용할 수 없습니다. 이러한 소스의 복제 지연을 모니터링하려면 다음 방법을 사용하면 됩니다.

보안 정의자 함수 만들기

9.6 이전 PostgreSQL 버전을 실행하는 소스의 복제 지연을 추적하는 데 권장되는 옵션은 Database Migration Service가 복제 지연 통계를 쿼리할 수 있도록 보안 정의자 함수를 만드는 것입니다. 다음 단계를 따르세요.

  1. 수퍼유저 계정을 사용하여 소스 데이터베이스에 연결하고 pg_stat_replication_user() 함수를 정의합니다.
    CREATE OR REPLACE FUNCTION pg_stat_replication_user()
    RETURNS TABLE (
      pid               integer,
      usesysid          oid,
      username          name,
      application_name  text,
      client_addr       inet,
      client_hostname   text,
      client_port       integer,
      backend_start     timestamp with time zone,
      backend_xmin      xid,
      state             text,
      sent_location     pg_lsn,
      write_location    pg_lsn,
      flush_location    pg_lsn,
      replay_location   pg_lsn,
      sync_priority     integer,
      sync_state        text
    )
    LANGUAGE SQL
    SECURITY DEFINER
    AS $$
      SELECT * FROM pg_catalog.pg_stat_replication;
    $$;
  2. 함수에서 공개 실행 권한을 취소하고 전용 마이그레이션 사용자 계정에만 실행 권한을 부여합니다.
    REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;
    GRANT EXECUTE ON FUNCTION pg_stat_replication_user() TO "MIGRATION_USER_ACCOUNT_NAME";

자체 호스팅 인스턴스의 경우: SUPERUSER 권한 사용

자체 호스팅 PostgreSQL 인스턴스의 경우 전용 마이그레이션 사용자 계정에 SUPERUSER 권한을 직접 부여할 수 있습니다.

ALTER USER MIGRATION_USER_ACCOUNT_NAME WITH SUPERUSER;

복제 지연 수동 모니터링

다음 쿼리를 사용하여 소스 인스턴스에서 복제 지연을 수동으로 모니터링할 수도 있습니다.

SELECT current_timestamp, application_name,
  pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.sent_location) AS sent_location_lag,
  pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.write_location) AS write_location_lag,
  pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.flush_location) AS flush_location_lag,
  pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.replay_location) AS replay_location_lag
FROM pg_stat_replication;

다음 단계