首页 > 解决方案 > 在 postgresql 中测量复制滞后

问题描述

我试图测量我系统中的复制时间延迟。(postgresql 10.1)

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

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

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

从第 2 列和第 3 列可以看出,最后一次接收 lsn 和重播 lsn 是相同的,这意味着系统是同步的。但我无法理解是什么pg_last_xact_replay_timestamp()。它如何在几秒钟内找出复制滞后。我是否使用错误的方法来衡量几秒钟内的滞后?

标签: postgresqldatabase-replicationpostgresql-10

解决方案


你在谈论pg_last_xact_replay_timestamp吗?这为您提供了在备用数据库上重放的最后一个事务在主数据库上提交的时间。

如果您知道总是有一些活动正在被复制,这可以用来衡量复制滞后。如果没有此类活动,则无法从该值中分辨出复制滞后。

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


推荐阅读