Sie messen die Verzögerung in Bytes von der Master-Seite ganz einfach pg_xlog_location_diff
mit bekommen können die Master-pg_current_xlog_insert_location
mit dem replay_location
für dieses Backend des pg_stat_replication
Eintrag zu vergleichen.
Dies funktioniert nur, wenn es auf dem Master ausgeführt wird. Sie können es nicht von der Replik aus tun, da die Replik keine Ahnung hat, wie weit der Master voraus ist.
Zusätzlich wird dies nicht die Verzögerung in Sekunden. In aktuellen PostgreSQL-Versionen (ab 9.4) gibt es keinen Zeitstempel, der mit einem Commit oder einem WAL-Record verbunden ist. Es gibt also keine Möglichkeit zu sagen, wie lange eine gegebene LSN (xlog-Position) her war.
Die einzige Möglichkeit, die Replikverzögerung in Sekunden bei einer aktuellen PostgreSQL-Version zu erhalten, besteht darin, dass ein externer Prozess regelmäßig eine update
in eine dedizierte Zeitstempeltabelle schreibt. So können Sie current_timestamp
auf dem Replikat mit dem Zeitstempel des letzten Eintrags in der Tabelle vergleichen, der auf dem Replikat sichtbar ist, um zu sehen, wie weit das Replikat zurückliegt. Dies erzeugt zusätzlichen WAL-Verkehr, der dann in Ihrer archivierten WAL für PITR (PgBarman oder was auch immer) aufbewahrt werden muss, so dass Sie die erhöhte Datennutzung mit der Granularität der Lag-Erkennung, die Sie benötigen, ausgleichen sollten.
PostgreSQL 9.5 kann Commit-Zeitstempel hinzufügen, mit denen Sie hoffentlich herausfinden können, wie lange ein bestimmtes Commit bereits stattgefunden hat und wie weit ein Replikat in Wanduhr-Sekunden zurückliegt.
Ja natürlich (Master sonst würde nicht wissen, genaue Verzögerung) so async Replikationsverzögerung chack scheint Die Zeit ist gleich. Die Daten auf dem Slave sind eine 100% identische Kopie des Masters. Es wäre nicht sinnvoll, wenn die Daten auf dem Weg zum Slave geändert würden. –
Gibt es eine andere Möglichkeit, die Verzögerungszeit zwischen Master- und Slave-Tabellen zu messen? – Alf162