为 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%';

后续步骤