在postgresql中测量复制延迟

在postgresql中测量复制延迟,postgresql,database-replication,postgresql-10,Postgresql,Database Replication,Postgresql 10,我正在尝试测量系统中的复制时滞。(postgresql 10.1) 我在查询中使用pg_last_xact_timestamp()、pg_last_receive_lsn()和pg_last_replay_lsn()函数的组合来检查延迟 (以如何从链接测量为例) 从第2列和第3列可以看出,最后一个接收lsn和replay lsn是相同的,这意味着系统是同步的。但是我无法理解什么是pg\u last\u xact\u replay\u timestamp()。它如何在几秒钟内发现复制延迟。我是否使

我正在尝试测量系统中的复制时滞。(postgresql 10.1)

我在查询中使用
pg_last_xact_timestamp()
pg_last_receive_lsn()
pg_last_replay_lsn()
函数的组合来检查延迟

(以如何从链接测量为例)


从第2列和第3列可以看出,最后一个接收lsn和replay lsn是相同的,这意味着系统是同步的。但是我无法理解什么是
pg\u last\u xact\u replay\u timestamp()。它如何在几秒钟内发现复制延迟。我是否使用了错误的方法来测量以秒为单位的延迟?

你说的是
pg\u last\u xact\u replay\u timestamp
?这为您提供了在主服务器上提交在备用服务器上重播的最后一个事务的时间

如果您知道总是有一些活动正在被复制,则可以使用此参数来测量复制延迟。如果没有此类活动,则无法从该值中区分复制延迟

您可以通过定期调用
txid\u current()
来确保始终存在活动,或者您可以以字节为单位测量复制延迟。

如果您使用“repmgr”包,它会在后台运行一个守护进程,并为您监视


编辑了问题:)。我认为复制延迟应该被测量为记录时间戳的差异(主记录插入时间)和now()(在待机状态下重放的时间)。我不明白pg_last_xact_replay_timestamp()如何用于测量滞后。我扩展了答案。如果存在恒定的活动,则与当前时间的差异是复制延迟的度量。
postgres=# SELECT now(), pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn(), EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())::INT;
               now                | pg_last_wal_receive_lsn | pg_last_wal_replay_lsn | date_part 
----------------------------------+-------------------------+------------------------+-----------
 2018-08-06 07:00:36.540959+05:30 | 4/99B84030              | 4/99B84030             |       223