↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

Wiki / 配置参数

synchronous_commit

英文手册覆盖始于 PostgreSQL 7.4. 来源历史与运行验证各自保留独立版本边界。

当前阅读 PG 18·选择有来源记录的版本

boot val
on
category
Write-Ahead Log / Settings
context
user
documented
true
enumvals
local, remote_write, remote_apply, on, off
extra desc
未知
lang
en
max val
未知
metadata version
18
min val
未知
name
synchronous_commit
short desc
Sets the current transaction's synchronization level.
source
pg-settings-source-snapshot
unit
未知
vartype
enum

版本定义 PG 18

指定数据库服务器向客户端返回“成功”指示之前,必须完成多少 WAL 处理。有效值为remote_apply、on(默认值)、remote_write、local和off。

如果synchronous_standby_names为空,只有on和off两种设置有意义;remote_apply、remote_write和local提供的本地同步级别都与on相同。所有非off模式在本地都会等待 WAL 刷写到磁盘。在off模式下则无需等待,因此,向客户端报告成功后,可能还要经过一段时间,才能保证事务不会因服务器崩溃而丢失。(最大延迟为wal_writer_delay的三倍。)与fsync不同,将此参数设为off不会带来数据库不一致的风险:操作系统或数据库崩溃可能会使一些最近报告已提交的事务丢失,但数据库状态会与这些事务已正常中止时完全相同。因此,当性能比完全确保事务持久性更重要时,关闭synchronous_commit可以是一种有用的替代方案。更多讨论见第 28.4 节。

如果synchronous_standby_names非空,synchronous_commit还控制事务提交是否等待备库处理其 WAL 记录。

设为remote_apply时,提交会等待当前同步备库回复,确认已收到并应用该事务的提交记录,使其对备库上的查询可见,并且已将其写入备库的持久存储。由于需要等待 WAL 重放,这会比之前的设置产生大得多的提交延迟。设为on时,提交会等待当前同步备库回复,确认已收到事务的提交记录,并已将其刷写到持久存储。这能保证事务不会丢失,除非主库和所有同步备库的数据库存储都损坏。设为remote_write时,提交会等待当前同步备库回复,确认已收到事务的提交记录,并已将其写入各自的文件系统。此设置能保证备库上的PostgreSQL实例崩溃时数据不丢失,但不能保证备库发生操作系统级别崩溃时数据不丢失,因为数据未必已写入备库的持久存储。设为local时,提交会等待本地刷盘,但不等待复制。使用同步复制时通常不希望采用这种设置,提供它是为了使选项完整。

此参数可以随时更改;每个事务的行为由提交时生效的设置决定。因此,让一些事务同步提交、另一些事务异步提交是可行且有用的。例如,当默认设置要求同步提交时,可以在一个包含多条语句的事务中执行SET LOCAL synchronous_commit TO OFF,使该事务异步提交。

表 19.1汇总了synchronous_commit各种设置具备的能力。

表 19.1. synchronous_commit 模式

synchronous_commit 设置本地提交持久性PG 崩溃后备库提交持久性OS 崩溃后备库提交持久性备库查询一致性
remote_apply••••
on•••
remote_write••
local•
off

比较版本

来源引用

完整定义与证据 JSON

定义来源

center · PostgreSQL 18 · english-manuals:2239aa7d2084ff1bd7b2a3dd4916e6f8fecaf8459c043c836c5485a44102f838

正文语言: zh-Hans · 2026-09-11@29c86d9