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的"翻译"工作,主备数据完全一致的情况下才返回事务提交成功的标记。

相关推荐
l1t5 小时前
利用短整数类型和部分字符串优化DuckDB利用数组求解数独SQL
开发语言·数据库·sql·duckdb
一 乐5 小时前
医疗管理|医院医疗管理系统|基于springboot+vue医疗管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·医疗管理系统
EllenShen1235 小时前
(Azure)PGSQL和redis 连通性测试 --code 备份
redis·postgresql·azure
TDengine (老段)6 小时前
从细胞工厂到智能制造:Extracellular 用 TDengine 打通数据生命线
java·大数据·数据库·科技·制造·时序数据库·tdengine
L.EscaRC8 小时前
浅析MySQL InnoDB存储引擎的MVCC实现原理
数据库·mysql
热爱运维的小七9 小时前
MongoDB 内存管理避坑指南:解决高占用、页错误等核心问题,让数据库性能翻倍
数据库·mongodb
冉冰学姐11 小时前
SSM公办小学网络报名系统f3d3p(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·ssm 框架·公办小学网络报名系统·教育信息化
叡鳍12 小时前
hive---HQL查询
数据库
vortex512 小时前
谷歌黑客语法挖掘 SQL 注入漏洞
android·数据库·sql
九河云13 小时前
软件开发平台 DevCloud
运维·服务器·数据库·科技·华为云