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 |
比较版本
来源引用
定义来源
center · PostgreSQL 18 · english-manuals:2239aa7d2084ff1bd7b2a3dd4916e6f8fecaf8459c043c836c5485a44102f838
正文语言: zh-Hans · 2026-09-11@29c86d9