postgresql 同步流复制两个相关参数synchronous_commit 和 synchronous_standby_names

一:synchronous_commit

1.synchronous_commit参数含义

这个参数用来设置事务提交返回客户端之前,一个事务是否需要等待 WAL 记录被写入磁盘。合法的值是{local,remote_write,remote_apply,on,off}。默认设置是on。

2.各可选值含义

2.1 local

当事务提交时,写入本地磁盘即可,不用关心备机的情况。

2.2 remote_write

表示流复制主库提交事务时,需等待备库接收主库发送的wal日志流并写入备节点操作系统缓存中,之后向客户端返回成功,这种情况下备库出现异常关闭时不会有已传送的wal日志丢失风险,但备机操作系统异常宕机就有已传送的wal丢失风险

2.3 on

1 )为on且没有开启同步备库的时候,会当wal日志真正刷新到磁盘永久存储后才会返回客户端事务已提交成功,

2) 当为on且开启了同步备库的时候(设置了synchronous_standby_names),必须要等事务日志刷新到本地磁盘,并且还要等远程备库也提交到磁盘才能返回客户端已经提交.

2.4 remote_apply

表示流复制主库提交事务时,需等待备库接收主库发送的wal流并写入wal文件,同时备库已经完成回放,之后才向客户端返回成功,简单的说remote_apply 表示本地wal已落盘,备库wal已落盘并且已经完成回放,这个设置保证了拥有两份持久化的wal,同时备库也已经完成了回放。

2.5 off

当数据库事务提交时不需要等待本地 wal buffer 写入 wal 日志,立刻向客户端返回成功

二:synchronous_standby_names

1. synchronous_standby_names 参数含义

这个参数用来指定同步备机的列表,存放的是需要设置为同步备机的备机名称

2. 参数配置语法

<think>好的,我需要回答用户关于PostgreSQL同步复制异步复制的区别、实现方式及适用场景的问题。首先,我得回忆一下之前学过的相关知识,并结合提供的引用内容来确保准确性。用户的问题明确,需要区分同步异步复制的不同点,以及它们的实现方式适用场景。根据引用中的资料,特别是引用3、5,里面详细说明了参数设置两者的工作原理。同步复制需要等待备库确认,而异步则不需要。同步复制在数据一致性上有优势,但可能影响性能;异步则相反,性能更好但存在数据丢失风险。接下来,我需要整理出结构清晰的回答。首先解释两者的定义,然后对比区别,包括数据一致性、性能、可用性配置参数。实现方式部分需要提到具体的参数设置,如synchronous_standby_namessynchronous_commit。适用场景则要分情况讨论,比如同步适用于金融等高要求场景,异步适合日志处理等对实时性要求不高的场景。还要注意引用文献的正确标注,比如在提到同步提交参数时引用35,在区别部分引用5中的工作原理。同时,用户可能需要相关的后续问题,所以得生成几个相关问题,比如性能优化、配置步骤或与其他数据库的对比。需要确保回答符合中文要求,使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$,但根据问题内容,可能公式较少,但如果有数学表达式的话要注意格式。例如,在解释同步复制的等待时间时,可能不需要公式,但如果有涉及计算的地方,需正确应用。 最后检查引用标注是否自然,比如在说明同步复制参数设置时,末尾添加[^3][^5],确保每个引用对应正确的内容。同时,确保回答结构清晰,分点明确,帮助用户逐步理解两者的区别应用场景。</think>### PostgreSQL 同步复制与异步复制的区别、实现方式及适用场景 #### 一、核心区别 1. **数据一致性** - **同步复制**:主库提交事务后,必须等待所有同步备库确认已接收并应用事务的 WAL 日志后,才向客户端返回成功。这保证了主备数据的强一致性,但会引入延迟[^3][^5]。 - **异步复制**:主库提交事务后立即返回成功,不等待备库确认。备库通过后台进程异步接收并应用 WAL 日志,可能导致主备数据短暂不一致[^5]。 2. **性能影响** - **同步复制**:因需等待备库响应,事务提交延迟较高,尤其在网络延迟大或备库负载高时更明显[^5]。 - **异步复制**:无等待机制,主库性能接近单机模式,吞吐量更高[^3]。 3. **可用性** - **同步复制**:若同步备库故障,主库事务提交会被阻塞,可能影响服务可用性[^5]。 - **异步复制**:备库故障不影响主库运行,但故障切换时可能丢失未同步的数据[^3]。 4. **配置参数** - 同步复制需设置 `synchronous_standby_names`(指定备库名称) `synchronous_commit=on`(或更严格等级如 `remote_apply`)[^3][^5]。 - 异步复制默认启用,无需特殊配置,或设置 `synchronous_commit=local/off`[^3]。 #### 二、实现方式 1. **同步复制配置示例** ```sql -- 主库配置 ALTER SYSTEM SET synchronous_standby_names = 'standby1'; -- 指定备库名称 ALTER SYSTEM SET synchronous_commit = 'remote_apply'; -- 最严格的一致性级别 SELECT pg_reload_conf(); -- 重载配置 ``` - **等级说明**: - `remote_apply`:备库应用 WAL 后返回确认(完全同步)[^3]。 - `on`(默认):备库写入 WAL 即返回(平衡性能与一致性)[^3]。 2. **异步复制的实现** 默认情况下,PostgreSQL 使用异步复制。可通过以下参数调整行为: ```sql ALTER SYSTEM SET synchronous_commit = 'local'; -- 主库写入 WAL 即返回 -- 或 ALTER SYSTEM SET synchronous_commit = 'off'; -- 完全异步(不等待任何确认) ``` #### 三、适用场景 1. **同步复制适用场景** - **金融交易系统**:要求主备数据绝对一致,容忍一定延迟(如银行核心系统)[^5]。 - **高可用架构**:需快速故障切换且零数据丢失的场景(如医疗数据管理)。 - **多数据中心容灾**:跨机房部署时,需确保异地副本实时同步。 2. **异步复制适用场景** - **日志分析系统**:允许短暂数据不一致,优先保障主库性能(如用户行为日志处理)[^5]。 - **读写分离架构**:备库用于只读查询,对数据实时性要求较低。 - **跨地域部署**:网络延迟较高时,优先保证主库响应速度。 #### 四、对比表格 | 特性 | 同步复制 | 异步复制 | |--------------------|----------------------------|----------------------------| | **数据一致性** | 强一致性(备库实时同步) | 最终一致性(可能短暂不一致) | | **事务延迟** | 较高(依赖网络备库性能) | 低(主库无需等待) | | **可用性风险** | 备库故障可能导致主库阻塞 | 备库故障不影响主库运行 | | **适用场景** | 金融、医疗等高一致性需求 | 日志处理、读写分离等高性能需求 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渔夫数据库笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值