9.6 より前のバージョンの PostgreSQL でレプリケーションの遅延モニタリングを有効にする

このページでは、9.6 より前のバージョンの PostgreSQL を実行しているソース インスタンスから移行するときに、レプリケーション遅延モニタリングを有効にする方法について説明します。ソース データベースの構成手順の詳細については、 ソース データベースを構成するをご覧ください。

9.6 より前の PostgreSQL バージョンを実行しているソース インスタンスの場合、デフォルトではレプリケーション遅延の指標を使用できません。このようなソースのレプリケーション遅延をモニタリングする場合は、次の方法を使用できます。

セキュリティ定義関数を作成する

9.6 より前のバージョンの PostgreSQL を実行しているソースのレプリケーション遅延を追跡するには、Database Migration Service がレプリケーション遅延をクエリできるようにするセキュリティ定義関数を作成することをおすすめします。手順は次のとおりです。

  1. スーパーユーザー アカウントを使用して、次の関数を定義します。
    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 <USER>;

セルフマネージド インスタンスの場合: SUPERUSER 権限を使用します。

セルフマネージド インスタンスの場合は、専用の移行 USER に 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
WHERE application_name LIKE 'cloudsql%';

次のステップ