测量 postgresql 中的复制延迟

kri*_*nan 7 postgresql database-replication postgresql-10

我试图测量我的系统中的复制时间滞后。(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
Run Code Online (Sandbox Code Playgroud)

从第2列和第3列可以看出,最后的接收LSN和重放LSN是相同的,这意味着系统是同步的。但我无法理解到底是什么pg_last_xact_replay_timestamp()。它如何找出以秒为单位的复制延迟。我是否使用错误的方法来测量延迟(以秒为单位)?

Lau*_*lbe 1

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

如果您知道始终有一些活动正在被复制,则可以使用它来测量复制延迟。如果没有此类活动,则无法从该值判断复制滞后。

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