pg 之 synchronous_commit参数

140 篇文章 111 订阅
22 篇文章 3 订阅

synchronous_commit参数是WAL相关配置参数,用于指定当数据库提交事务时是否需要等待WAL日志写入硬盘后才向客户端返回成功,这个参数可选值多(on、off、local、remote_write、remote_apply 五种),参数值在单实例和主从复制场景下含义也不尽相同。恰好看pg大会ppt的时候发现有描述参数含义不错的图,结合之前看过的文章整理学习学习。

 

一、 单实例

单实例下因为没有远程节点,所以只有三个值可以设(on、off、local),并且此时设为on和local基本是一个意思,相当于只有on、off两种值,下面分别来看。

 

1. synchronous_commit=on / local

单实例下设置成 on或local 均表示提交事务时需等待相应WAL数据写入本地WAL日志文件后才向客户端返回成功。设置成on非常安全,但数据库性能有损耗 。

 

2. synchronous_commit=off

与上面相反,设置成off表示提交事务时不需等待相应WAL数据写入本地WAL日志文件即可向客户端返回成功。当数据库宕机时最新提交的少量事务可能丢失,但数据库重启后会认为这些事务异常中止。设置成off能够提升数据库性能,因此对于数据准确性没有精确要求同时追求数据库性能的场景建议设置成off。

 

二、 主从复制

主从复制场景下五种值都可以设置,并且由于有了远程节点,on和local的含义也不再相同。

 

1. synchronous_commit=off

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

 

2. synchronous_commit=local

含义同上,表示提交事务时需等待相应WAL数据写入本地WAL日志文件后才向客户端返回成功。

 

3. synchronous_commit=remote_write

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

简单地说 remote write 表示本地WAL已落盘,备库的WAL还在备库操作系统缓存中,也就是只有一份持久化的WAL。这个选项带来的事务响应时间较低,但安全性也相对较低——这种情况下备库实例出现异常关闭时己传送的WAL日志不会有丢失风险,但备库操作系统异常宕机就有已传送的WAL丢失风险了,因为此时WAL可能还没完全写人备节点WAL文件中。

 

4. synchronous_commit=on

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

简单地说 on 表示本地和备库的WAL都已落盘,有两份持久化的WAL,但备库此时还没有完成apply,这个选项带来的事务响应时间较高 。

 

5. synchronous_commit=remote_apply

表示流复制主库提交事务时 ,需等待备库完成相应部分apply才向客户端返回成功。

简单地说 remote_apply 表示本地和备库的WAL都已落盘且备库完成相应部分apply,这个设置保证了拥有两份持久化的 WAL,同时备库也完成了重做,这个选项带来的事务响应时间最高 。

 

三、 性能对比

 

参考

《赵振平--太阳塔--PostgreSQL 可否用在银行核心交易系统》

《PostgreSQL实战》

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hehuyi_In

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

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

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

打赏作者

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

抵扣说明:

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

余额充值