在PostgreSQL中测量复制滞后

时间:2018-08-06 01:43:07

标签: postgresql database-replication postgresql-10

im试图测量系统中的复制时间滞后。 (PostgreSQL 10.1)

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

(以如何通过this链接进行测量为例)

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

从第二列和第三列可以看出,最后一个接收lsn和重播lsn是相同的,这意味着系统是同步的。但是我无法理解pg_last_xact_replay_timestamp()是什么。如何找出以秒为单位的复制延迟。我是用错误的方法来测量延迟吗?

2 个答案:

答案 0 :(得分:0)

您是在谈论pg_last_xact_replay_timestamp吗?这样您就有时间在备用数据库上重播的最后一个事务在主数据库上提交。

如果您知道总有一些活动正在被复制,则可用于测量复制滞后。如果没有这样的活动,您将无法判断出该值的复制延迟。

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

答案 1 :(得分:0)

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

https://repmgr.org/docs/current/repmgrd-monitoring.html