postgreSQL数据库同步流复制和异步流复制控制

作者:瀚高PG实验室 (Highgo PG Lab)- 徐云鹤
背景:
小L:鹤神鹤神,为什么我设置的同步流复制,主库提交之后备库查不到数据呢?
我:估计是你设置的同步级别不够高~
小L:还分同步级别?同步模式不就是保证两边数据一致的吗?怎么还会出现主库能查到数据备库查不到数据的情况呢?查询pg_stat_replication里边显示sync不就是代表数据一致吗?
我:待我给你慢慢道来。

pg同步流复制和异步流复制关键在于两个参数:
synchronous_standby_names 控制哪些standby被应用同步策略,该参数使用方法不在此赘述;
synchronous_commit控制同步策略级别。
你以为的同步可能不是你以为的同步。
即使是通过pg_stat_replication查询出sync_state列值为sync也不一定是真正的同步。
下边通过一个图片和表格来直观提现什么时候是同步,什么时候是异步,及不同等级之间的区别。
在这里插入图片描述
synchronous_commit参数:

同步等级设定值概述保证范围
同步remote_apply应用发起提交后,等到在备库上应用WAL(更新数据)后,它将返回COMMIT响应,并且可以在备库上进行引用。由于完全保证了数据同步,因此它适合需要备库始终保持最新数据的负载分配场景。1-9
同步on(默认)应用发起提交后,在备库上写入WAL之后,返回COMMIT响应。该选项是性能和可靠性之间的最佳平衡。1-6
准同步的remote_write应用发起提交后,等到WAL已传输到备库后,返回COMMIT响应。1-5
异步local应用发起提交后,写入主库WAL之后,返回COMMIT响应。1-2
异步off应用发起提交后,直接返回COMMIT响应,而无需等待主库WAL完成写入。1

最后举个例子,主库设置synchronous_commit为on,备库设置recovery_min_apply_delay = ‘1d’。
这样就会出现主库pg_stat_replication查询出sync_state列值为sync,提交一条数据后备库查不到的现象。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值