הפעלת מעקב אחרי עיכוב ברפליקציה בגרסאות PostgreSQL שקודמות ל-9.6

בדף הזה מוסבר איך להפעיל מעקב אחרי עיכוב ברפליקציה כשמעבירים ממכונת מקור שפועלת בגרסאות PostgreSQL שקודמות ל-9.6. כאן מוסבר איך מגדירים את מסד הנתונים של המקור.

במכונות מקור שפועלות בגרסאות PostgreSQL שקודמות ל-9.6, מדד העיכוב ברפליקציה לא זמין כברירת מחדל. אם אתם רוצים לעקוב אחרי עיכובים ברפליקציה במקורות כאלה, אתם יכולים להשתמש בגישות הבאות.

יצירת פונקציה להגדרת אבטחה

האפשרות המומלצת למעקב אחרי עיכוב ברפליקציה במקורות שפועלים בגרסאות PostgreSQL שקודמות ל-9.6 היא ליצור פונקציה של מגדיר אבטחה, שמאפשרת ל-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

במכונות בניהול עצמי, אפשר להעניק את ההרשאה SUPERUSER ישירות לUSER הייעודי להעברה.

מעקב ידני אחרי העיכוב ברפליקציה

אפשר גם לעקוב אחרי עיכוב הרפליקציה באופן ידני באמצעות השאילתה הבאה:

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

המאמרים הבאים