New replication mode: async, write, fsync, replay

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介:
PostgreSQL 9.1的同步复制事务需要等待同步复制节点的 xlog flush ACK 才可以结束事务(即等待xlog写入磁盘)。
而异步复制事务不需要standby的ACK。
在2012-01的commitFest中有一个关于新的复制模式的主题, 目前已经处于commited状态。
这个patch允许在standby节点的recovery.conf配置文件,加入了1个replication_mode参数,可选的参数值为,async, write, fsync, replay.
1. async
顾名思义代表这个standby是异步standby。
2. write
代表primary节点需要等待standby节点将接收到的xlog写入内存。
3. fsync
代表primary节点需要等待standby节点将接收到的xlog写入磁盘。
4. replay
代表primary节点需要等待standby节点将接收到的xlog完成恢复。
在write, fsync, replay模式下面,standby增加了一个XLogRecPtr消息,分别用来发送当前已经写入内存,磁盘,或完成恢复的location。
 只有当primary接收到的XLogRecPtr中的location大于主节点正在等待的COMMIT location时,才可返回success给客户端。

还记不记得9.1的同步复制同一时刻只支持一台节点成为sync standby节点,其他的都是异步复制节点。
所以又有一个patch是关于quorum的。
在主节点的postgresql.conf参数中增加了一个quorum参数,默认等于0。记录的是需要收到ACK的STANDBY节点个数。
当系统中存在多个sync standby节点时,主节点必须接收到大于或等于quorum配置的个数个sync standby节点的replication ACK,事务才可返回给客户端success消息。
quorum个数大于当前系统中sync standby个数时以sync standby个数为准。
系统中没有sync standby节点但是配置的quorum>0时不受影响。

【小结】
1. 由于write模式返回的是xlog写入内存的位置,比flush到磁盘快很多,因此带来同步复制的性能增强,当然也带来了少许风险,如主节点和sync standby节点同时DOWN机是有风险的。
性能提升如下 : 
synchronous_commit = on
tps = 424.510843 (including connections establishing)
tps = 420.767883 (including connections establishing)
tps = 419.715658 (including connections establishing)
tps = 428.810001 (including connections establishing)
tps = 337.341445 (including connections establishing)

synchronous_commit = write
tps = 550.752712 (including connections establishing)
tps = 407.104036 (including connections establishing)
tps = 455.576190 (including connections establishing)
tps = 453.548672 (including connections establishing)
tps = 555.171325 (including connections establishing)

2. quorum 参数降低了上面提到的风险问题,因为可以允许多个同步复制standby节点。

【参考】
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
9月前
|
缓存 关系型数据库
PG的synchronous_commit
PG的synchronous_commit
100 0
|
10月前
|
SQL 关系型数据库 MySQL
|
11月前
|
Oracle 前端开发 关系型数据库
log file sync 和 log file parallel write等待事件的区别和联系
log file parallel write 和log file sync这两个等待事件关系密切,很多人对这两个等待事件有一些误解,我们先来看看Oracle官方文档的解释:
|
程序员 Go
你真的了解 sync.Once 吗
你真的了解 sync.Once 吗
148 0
|
存储 缓存 Go
原来sync.Once还能这么用
原来sync.Once还能这么用
120 0
原来sync.Once还能这么用
|
存储 缓存 数据处理
完全揭秘log file sync等待事件
什么是log file sync等待事件呢?在一个提交(commit)十分频繁的数据库中,一般会出现log file sync等待事件,当这个等待事件出现在top5中,这个时侯我们需要针对log file sync等待事件进行优化,一定要尽快分析并解决问题,否则当log file sync等待时间从几毫秒直接到20几毫秒可能导致系统性能急剧下降,甚至会导致短暂的挂起。
完全揭秘log file sync等待事件
|
安全 Java Go
sync
sync包有以下几个内容: (1)sync.Pool 临时对象池 (2)sync.Mutex 互斥锁 (3)sync.RWMutex 读写互斥锁 (4)sync.WaitGroup 组等待 (5)sync.Cond 条件等待 (6)sync.Once 单次执行 一、临时对象池 Pool可以用来存储临时对象,其实原理就是这个对象池指向对象变量,以防没有变量指向对象时,被GC所回收。
1313 0
0322理解db file parallel read等待事件2
[20180322]理解db file parallel read等待事件2.txt --//上个星期的学习:http://blog.itpub.net/267265/viewspace-2151973/ https://docs.
1127 0