PG的延迟复制及相关参数的设置影响
admin
2023-03-03 11:02:30
0

说明: 下文的部分内容节选自《PostgreSQL实战》

PG的延迟复制

参数: recovery_min_apply_delay

 

某些情况下,一个后备服务器会尽快恢复来自于主服务器的 WAL 记录。有一份数据的延时拷贝是有用的,它能提供机会纠正数据丢失错误。这个参数允许你将恢复延迟一段固定的时间,如果没有指定单位则以毫秒为单位。例如,如果你设置这个参数为5min,对于一个事务提交,只有当后备机上的系统时钟超过主服务器报告的提交时间至少 5分钟时,后备机才会重放该事务。

 

有可能服务器之间的复制延迟会超过这个参数的值,在这种情况下则不会增加延迟。注意延迟是根据主服务器上写 WAL 的时间戳以及后备机上的当前时间来计算。由于网络延迟或者级联复制配置导致的传输延迟可能会显著地减少实际等待时间。如果主服务器和后备机上的系统时钟不同步,这会导致恢复比预期的更早应用记录。但这不是一个主要问题,因为这个参数有用的设置比服务器之间的典型事件偏差要大得多。

 

只有在事务提交的 WAL 记录上才会发生延迟。其他记录还是会被尽可能快地重放,这不会成为问题,因为 MVCC 可见性规则确保了在对应的提交记录被应用之前它们的效果不会被看到。

 

一旦恢复中的数据库已经达到一致状态,延迟就会产生,直到后备机被提升或者触发。在那之后,后备机将会结束恢复并且不再等待。

 

这个参数的目的是和流复制部署一起使用,但是,如果指定了该参数,所有的情况下都会遵守它。使用这个特性也会让hot_standby_feedback被延迟,这可能导致主服务器的膨胀,两者一起使用时要小心。

 

 

延迟备库的搭建很简单, 只要在 recovery.conf 里面增加个配置项即可

recovery_min_apply_delay = 1min  # 这里我测试就设置1分钟的延迟

## 默认的支持时间单位为 ms sminhd 毫秒 分钟 小时

 

注意:修改后,需要重启 standby节点才能生效。

 

 

 

然后,在主库创建表并插入一条测试数据:

postgres=# create table test_delay(id int4,create_time timestamp(0) without time zone);

postgres=# insert into test_delay (id,create_time) values (1,now());

 

然后,等一分钟左右到延迟standby节点去查看下数据是否同步过去

 

 

延迟复制场景下 recovery_min_apply_delay 参数对同步复制的影响

同步复制情况下, 通常要 synchronous_commit 配置为 on remote_apply

on 表示 standbywal接收到 --> 写入wal日志文件 --> 向客户端返回成功。

standby表示 standbywal接收到 --> 写入wal日志文件 --> 并应用到standby --> 才会向客户端返回成功。

 

 

下面对 synchronous_commit 不同参数下,并且设置了延迟复制的测试:

 

场景1 synchronous_commit=on  并且 recovery_min_apply_delay = 1min

注意:

synchronous_commit是设置在主库的postgresql.conf中的(支持会话级别设置,也可以修改配置文件reload后全局生效)

recovery_min_apply_delay 是设置在standbyrecovery.conf中的。

 

这种场景下, 我们在主库上插入一条数据,主库会立即返回执行成功or失败的结果。 然后我们到延迟复制的standby去查询,发现还是会需要1min后才能查到这条数据。

也就是说, 延迟备库场景下, synchronous_commit 配置为on 异步流复制是一致的。

 

 

 

 

场景2 synchronous_commit=remote_apply  并且 recovery_min_apply_delay = 1min

注意:

synchronous_commit是设置在主库的postgresql.conf中的(支持会话级别设置,也可以修改配置文件reload后全局生效)

recovery_min_apply_delay 是设置在standbyrecovery.conf中的。

 

这种场景下, 我们在主库上插入一条数据,主库会hang住等待1min(等待从库完成apply操作)后,然后才能返回执行成功or失败的结果。

然后我们到延迟复制的standby去查询,发现立即就能查到这条数据。

 

也就是说, 延迟备库场景下, synchronous_commit 配置为 remote_apply时,会造成主库上面的事务的提交的阻塞。

生产环境用到延迟从库的场景下,一定要避免设置 synchronous_commit=remote_apply (当然从性能角度考虑也很少会设置为remote_apply)

 

 

 


相关内容

热门资讯

年龄相差40多岁,韩执政党党首... 当地时间5月3日,韩国执政党共同民主党党首郑清来携“备战”国会议员补选的前青瓦台人工智能未来规划首席...
人民之心·总书记谈政绩观④|一... 统筹:李琳 杨格策划:叶莉子设计:杨晨悦校对:陈学德素材来源:《人民日报》、新华网
英方裁定2名中国公民有罪,外交... 澎湃新闻记者 杨文钦 朱郑勇5月8日,外交部发言人林剑主持例行记者会。英国广播公司(BBC)记者提问...
特朗普威胁欧盟:7月4日之前履... 【文/观察者网 陈思佳】去年7月,美国和欧盟在英国达成一项贸易协议,但欧盟目前仍未批准协议,引起美国...
四川“人工智能+”一号创新工程... “三步走” ●到2027年,实现人工智能与重点领域广泛深度融合 ●到2030年,加快建成具有全国影响...
移动云总经理孙少陵:夯实算力网... 【移动云总经理孙少陵:夯实算力网络底座 实现智算全域互联】财联社5月8日电,中国移动2026移动云大...
苹果带摄像头AirPods已进... PChome 5月8日消息,彭博社记者马克·古尔曼爆料称,苹果最新打造的带摄像头AirPods已进入...
原创 马... 希冯·齐利斯,埃隆·马斯克四个孩子的母亲,周三在法庭上公开了她与这位科技亿万富翁之间复杂且曾一度保密...
农田边毒水直流,比排污更刺眼的... 5月7日,总台《焦点访谈》曝光了徐州贾汪区农谷大道路边沟存在水体污染问题。全长12公里的路边沟满是污...
28岁女子坠亡,施工方谎报 近日,深圳龙岗区应急管理局公布了《龙岗龙城香港中文大学(深圳)医学院项目Ⅰ标“12·26”一般高处坠...