PostgreSQL synchronous_commit 参数

发布于:2025-02-11 ⋅ 阅读:(26) ⋅ 点赞:(0)

一、单实例

单实例下因为没有远程节点,所以只有三个值可以设(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。

二、主从复制

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,同时备库也完成了重做,这个选项带来的事务响应时间最高 。


网站公告

今日签到

点亮在社区的每一天
去签到