PostgreSQL 流复制参数 - synchronous_commit

文章目录

  • 一、单实例
    • [1、synchronous_commit = off](#1、synchronous_commit = off)
    • [2、synchronous_commit = on / local](#2、synchronous_commit = on / local)
  • 二、主从
    • [1、synchronous_commit = off](#1、synchronous_commit = off)
    • [2、synchronous_commit = local](#2、synchronous_commit = local)
    • [3、synchronous_commit = remote_write](#3、synchronous_commit = remote_write)
    • [4、synchronous_commit = on](#4、synchronous_commit = on)
    • [5、synchronous_commit = remote_apply](#5、synchronous_commit = remote_apply)

一、单实例

1、synchronous_commit = off

设置成off表示提交事务时不需等待相应WAL数据写入本地WAL日志文件即可向客户端返回成功。当数据库宕机时最新提交的少量事务可能丢失,但数据库重启后会认为这些事务异常中止。

设置成off能够提升数据库性能,因此对于数据准确性没有精确要求同时追求数据库性能的场景可以考虑设置成off。

2、synchronous_commit = on / local

单实例下设置成 on或local均表示提交事务时需等待相应WAL数据写入本地WAL日志文件后才向客户端返回成功。设置成on理论上事务是绝对安全的,但相对与off需要略微多一点额外的耗时。

二、主从

1、synchronous_commit = off

含义与单实例相同,表示提交事务时不需等待本地相应WAL数据写入本地WAL日志文件即可向客户端返回成功。

2、synchronous_commit = local

含义与单实例相同,表示提交事务时需等待相应WAL数据写入本地WAL日志文件后才向客户端返回成功,但是不关心从节点的情况。

3、synchronous_commit = remote_write

如果没有设置synchronous_standby_names,remote_write跟单实例下synchronous_commit=local含义相同

  如果设置了设置了synchronous_standby_names:

  当流复制主库提交事务时,需等待备库接收主库发送的WAL日志流并写入备节点操作系统缓存中,才向客户端返回成功,此时备库的WAL还在备库操作系统缓存中。

  除非一个事物提交之后,在standby节点WAL日志固化之前的wal_writer_delay(默认200毫秒)这个间隔内,同时发生这两个事件:

  1. 主节点磁盘故障导致数据损坏;

  2. standby节点操作系统发生宕机,才有可能造成数据丢失。

4、synchronous_commit = on

如果未设置synchronous_standby_names = on跟单实例下含义相同

  如果设置了synchronous_standby_names = on跟单实例下含义不同,此时表示流复制主库提交事务时,需等待备库接收主库发送的WAL日志流并写入WAL文件,也即主备的WAL日志同时落盘之后,之后才向客户端返回成功。

5、synchronous_commit = remote_apply

如果未设置synchronous_standby_names,remote_apply等同于on,跟单实例下含义相同。

  如果设置了synchronous_standby_names = on跟单实例下含义不同,表示流复制主库提交事务时 ,需等待备库完成相应的WAL日志的apply才向客户端返回成功。

  也就是说从数据需要接收主节点WAL日志,并且完成了WAL的"翻译"工作,主备数据完全一致的情况下才返回事务提交成功的标记。

相关推荐
憧憬成为web高手9 分钟前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学21 分钟前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh2 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z123456789863 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD3 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
TlSfoward4 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记4 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发5 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
SelectDB5 小时前
PostgreSQL 实时同步到 Apache Doris:一站式 CDC 解决方案
数据库
欲速不达88205 小时前
Mysql并发DML锁等待的优化
数据库·mysql