PostgreSQL - 鱼与熊掌可兼得 - 多副本0丢失与高性能兼得 - 事务级异步、同步开关

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

标签

PostgreSQL , synchronous_commit , redo , local , remote_write , remote_apply , on , off


背景

大多数的数据库属于IO密集型应用,特别是写繁忙的TP系统,例如账户系统。

为了保证数据的可靠性,事务提交时,需要确保事务产生的REDO落到持久化的存储中。

为了提高响应时间,除了数据库软件本身的优化,例如分组提交(降低IO频次)。还可以通过购买高IOPS能力的硬件来实现RT时延的降低。

当然,将来硬盘的IO延迟如果能和内存到一个级别,实际上就没有REDO什么事了。

实际上,还有一种折中的方法,异步提交。

PostgreSQL的异步提交模式非常多,(PG的异步提交不会导致数据的不一致,并且是专门的进程在调度写出,所以即使异步,基本上涉及事务RECORD丢的可能性也非常少)。 例如:

synchronous_commit  
  
local, remote_write, remote_apply, on, off.  

解释

local, 本地fsync  
  
remote_write, 本地fsync + 超阈值个数的 sync standby write   (quorum based sync standby)  
  
on, 本地fsync + 超阈值个数的 sync standby fsync  (quorum based sync standby)  
  
remote_write, 本地fsync + 超阈值个数的 sync standby apply   (quorum based sync standby)  
  
off, 本地write     

同时PostgreSQL支持事务级修正synchronous_commit提交模式。

例如,对可靠性要求高的事务,可以设置高等级的模式,可靠性要求低的事务可以使用低等级模式,提高性能。

pic

例子

即使在同一个事务中,我们也能根据涉及金额的大小来修正synchronous_commit.

例如涉及金额低于10 RMB时,继续使用异步提交,即使真的丢失几笔,赔偿来解决也是没有问题的。有些时候硬件成本远远比赔偿金额还要高。

1、开启事务

postgres=# begin;  
BEGIN  

2、执行一些事务内的SQL

postgres=# select 2;  
 ?column?   
----------  
        2  
(1 row)  

3、涉及金额小于10,不改变默认的异步模式

postgres=# insert into tbl_charge values (3,1,now());  
INSERT 0 1  
postgres=# show synchronous_commit ;  
 synchronous_commit   
--------------------  
 off  
(1 row)  

4、当程序发现涉及金额大于10时,主动设置当前事务的模式为同步模式。确保事务提交后,绝对不丢失。

postgres=# set local synchronous_commit = on;  
SET  
postgres=# show synchronous_commit ;  
 synchronous_commit   
--------------------  
 on  
(1 row)  
  
postgres=# insert into tbl_charge values (4,10000000,now());  
INSERT 0 1  

5、结束事务,由于使用了同步模式,绝对不可能丢事务。

postgres=# end;  
COMMIT  

6、当前会话当前模式又回到了默认的异步模式。

postgres=# show synchronous_commit ;  
 synchronous_commit   
--------------------  
 off  
(1 row)  

模式可设置的范围

1、系统级

2、库级

3、用户级

4、会话级

5、事务级

根据不同的需求,在不同的层级设置即可。

小结

通过提交模式的多种组合,可以达到多种可靠性要求。

通过事务级的设置,可以在不同的事务间,在性能、可靠性方面自由的选择。

使用较低成本的硬件,实现业务对高可靠和高可用的混合需求。

参考

《PostgreSQL 10.0 preview 功能增强 - slave支持WAITLSN 'lsn', time;用于设置安全replay栅栏》

《PG多节点(quorum based), 0丢失 HA(failover,switchover)方案》

《PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
关系型数据库 分布式数据库 数据库
PolarDB PostgreSQL版:Oracle兼容的高性能数据库
PolarDB PostgreSQL版是一款高性能的数据库,具有与Oracle兼容的特性。它采用了分布式架构,可以轻松处理大量的数据,同时还支持多种数据类型和函数,具有高可用性和可扩展性。它还提供了丰富的管理工具和性能优化功能,为企业提供了可靠的数据存储和处理解决方案。PolarDB PostgreSQL版在数据库领域具有很高的竞争力,可以满足各种企业的需求。
|
7月前
|
SQL 关系型数据库 分布式数据库
PolarDB在尝试同步DDL任务时出现了问题
PolarDB在尝试同步DDL任务时出现了问题
72 1
|
1月前
|
关系型数据库 MySQL OLAP
PolarDB +AnalyticDB Zero-ETL :免费同步数据到ADB,享受数据流通新体验
Zero-ETL是阿里云瑶池数据库提供的服务,旨在简化传统ETL流程的复杂性和成本,提高数据实时性。降低数据同步成本,允许用户快速在AnalyticDB中对PolarDB数据进行分析,降低了30%的数据接入成本,提升了60%的建仓效率。 Zero-ETL特性包括免费的PolarDB MySQL联邦分析和PolarDB-X元数据自动同步,提供一体化的事务处理和数据分析,并能整合多个数据源。用户只需简单配置即可实现数据同步和实时分析。
|
1月前
|
关系型数据库 分布式数据库 数据库
PolarDB常见问题之PolarDB影响下游的binlogl同步如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL标准版:低成本高性能的数据库解决方案
PolarDB MySQL标准版:低成本高性能的数据库解决方案 随着数字化时代的到来,企业对于数据处理的需求越来越高,而数据库作为数据处理的核心,其性能和成本成为了企业关注的焦点。阿里云全新推出的PolarDB MySQL标准版,以全新的架构和优化,为企业提供了高性能、低成本的数据库解决方案。
129 2
|
3月前
|
Cloud Native 关系型数据库 MySQL
PolarDB MySQL企业版:云原生架构,超高性能与可靠性的完美结合
在数字化时代,数据已成为企业的核心资产。对于现代企业来说,选择一款高性能、高可靠性、高性价比的数据库至关重要。阿里巴巴自研的云原生HTAP数据库——PolarDB MySQL企业版,正是这样一款满足企业需求的理想选择。
389 1
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版:强大功能,超高性能,满足企业级需求
PolarDB MySQL版:强大功能,超高性能,满足企业级需求 在当今信息化社会,企业对于数据处理的需求日益增长,如何选择一款高性能、高可靠性且成本合理的数据库成为了一大挑战。阿里巴巴的PolarDB MySQL版应运而生,它不仅兼容MySQL,还具备传统数据库所不具备的优势,为企业提供了更高效、更可靠的数据处理方案。
107 3
|
4月前
|
SQL 存储 关系型数据库
PolarDB-X Operator 基于两次心跳事务的指定时间点恢复方案介绍
本文将介绍,PolarDB-X Operator将在事务策略为XA事务或者TSO事务时,如何实现全局一致的任意时间点恢复,提出了基于两次心跳事务的恢复方案。
|
7月前
|
存储 关系型数据库 数据库
数据库内核那些事|PolarDB X-Engine:如何构建1/10成本的事务存储引擎?
X-Engine引擎是PolarDB为用户提供的低成本,高性价比的解决方案,LSM-tree分层存储结合标准zstd压缩,在性能和成本做到了很好的平衡。在标准sysbench场景下,存储空间相比InnoDB引擎减少60%,读写性能降低10-20%。
数据库内核那些事|PolarDB X-Engine:如何构建1/10成本的事务存储引擎?
|
7月前
|
关系型数据库 分布式数据库 数据库
VLDB顶会论文解读|PolarDB MySQL高性能强一致集群核心技术详解
论文中,PolarDB-SCC提出了一个全局强一致的主从架构的云原生数据库。目前该架构已在PolarDB架构中上线一年有余,是业内首个在业务无感知情况下实现全局一致性读的主从架构云原生数据库,解决了一直以来海量客户的一致性痛点。

相关产品

  • 云原生数据库 PolarDB