关于 synchronous_commit 参数使用

本文详细介绍了 PostgreSQL 中的 synchronous_commit 参数,它控制了事务提交时的同步方式,包括 on, off, local, remote_write, remote_receive 和 remote_apply 六种模式。同时,文章还解释了 synchronous_standby_names 参数,用于指定同步备机列表,详细描述了其配置方式和策略,如 ANY, FIRST 等。这两个参数对于数据库的高可用性和一致性至关重要。" 125645801,315221,STM32CubeIDE驱动315M无线遥控模块实战,"['stm32', '单片机', '嵌入式硬件', '物联网', 'arm']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、参数说明

1. synchronous_commit

含义:表示当前事务的同步方式。

通常情况下,一个事务产生的日志的同步顺序如下:

  1. 主机将日志内容写入本地内存。
  2. 主机将本地内存中的日志写入本地文件系统。
  3. 主机将本地文件系统中的日志内容刷盘。
  4. 主机将日志内容发送给备机。
  5. 备机接受到日志内容,存入备机内存。
  6. 备机将备机内存中的日志写入备机文件系统。
  7. 备机将备机文件系统中的日志内容刷盘。
  8. 备机回放日志,完成对数据文件的增量更新。

而 synchronous_commit 的取值影响着主机提交以及主备机间同步提交的方式,具体如下:

  • on

表示主机事务提交需要等待备机将对应日志刷新到磁盘。当为on且开启了同步备库的时候(设置了synchronous_standby_names),必须要等事务日志刷新到本地磁盘,并且还要等远程备库也提交到磁盘才能返回客户端已经提交。

  • off

表示主机事务提交无需等待主机自身将对应日志刷新到磁盘,通常也称为异步提交。

  • local

表示主机事务提交需要等待主机自身将对应日志刷新到磁盘,通常也称为本地提交,此时不关心备机的情况。

  • remote_write

表示主机事务提交需要等待备机将对应日志写到文件系统(无需刷新到磁盘)。

  • remote_receive

表示主机事务提交需要等待备机接收到对应日志数据(无需写入文件系统)。

  • remote_apply

表示主机事务提交需要等待备机完成对应日志的回放操作。

2. synchronous_standby_names

含义:用来指定同步备机的列表,存放的是需要设置为同步备机的备机名称表示同步复制的备机名称列表,每个名称用逗号分隔。

支持以下几种方式进行配置:

  • ANY num_sync (standby_name [, …]) [, ANY num_sync (standby_name [, …])]
  • [FIRST] num_sync (standby_name [, …])
  • standby_name [, …]

其中:

  • num_sync 是事务需要等待其回复的同步复制的备机的数量,standby_name 是备机的名称,FIRST 以及ANY 指定从所列服务器中选取同步复制的备机的策略。
  • ANY N (node1,node2,…) 表示在括号内任选N个主机名称作为同步复制的备机名称列表。例如,ANY 1 (node1,node2) 表示在node1和node2中任选一个作为同步复制的备机名称。
  • ANY N1 (node1,node2,…), ANY N2 (node3,node4,…) 表示分组潜在同步复制的备机名称列表,在第一组括号内任选N1个主机名称作为第一组同步复制的备机名称列表,在第二组括号内任选N2个主机名称作为第二组同步复制的备机名称列表。此时两个分组之间为且关系,必须两个分组均达到各自需求的同步备机数,本地事务才可以被提交。
  • FIRST N (node1,node2,…) 表示在括号内按出现顺序的先后作为优先级选择前N个主机名称作为同步复制的备机名称列表。例如,FIRST 1 (node1,node2)表示选择node1作为同步复制的备机名称。
  • node1,node2,…和 FIRST 1 (node1,node2,…) 具有的含义相同。

3. 参数总结

简单理解,第一个参数 synchronous_commit 控制的是事务提交的时候要不要等备机进行同步提交,以及如何等(或要等到wal落到哪个层级),第二个参数 synchronous_standby_names 则是控制哪些节点可以成为同步备机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值