我有一个 Postgres 9.2.1 服务器主服务器(地理定位在欧盟)和 2 个从属副本(一个在欧盟,一个在美国)。欧盟从属服务器也用于读取查询,美国从属服务器仅用于故障转移。由于选择查询,欧盟的复制延迟是否可能大于美国副本?
我使用这个查询来提取复制滞后:
SELECT EXTRACT(MILLISECONDS FROM now() - pg_last_xact_replay_timestamp())
答案1
我猜您正在使用 postgresql 自己的带有“热备用”选项的流复制,而不是像 slony 或 bucardo 这样的附加复制系统。
使用流式复制时,每当备用服务器上开始事务(包括单个查询)时,复制都会暂停,以防止复制覆盖查询可能尝试使用的数据。因此,欧盟的复制滞后可能会更高。这已记录在案这里。
这max_standby_streaming_delay
从属副本上的配置参数控制 postgresql 等待事务完成的时间。如果事务未完成,postgresql 将中止事务,以便它能够赶上复制。通过调整此设置,您可以减少查询可能导致的滞后时间,但代价是当服务器需要赶上时取消查询。