这些设置控制内置流复制功能的行为。主库负责发送数据,备库负责接收数据。 在级联复制中,备库也可以同时充当发送者。这里列出的参数主要用于发送服务器和备库, 但有些参数只对主库有意义。
这些参数适用于向一个或多个备库发送复制数据的服务器。主库总是发送服务器,因此这些参数通常需要在主库上设置。
max_wal_senders #指定可以同时连接到该服务器以接收复制数据或流式基础备份的最大客户端数,也就是 WAL 发送进程的最大数量。 默认值通常为 10。值 0 表示禁用复制。此参数只能在服务器启动时设置。
max_replication_slots #指定服务器支持的复制槽最大数量。默认值为 10。此参数只能在服务器启动时设置。 如果将其设得小于当前已有复制槽数量,服务器将无法启动。
wal_keep_size #指定 pg_wal 目录中应至少保留多少旧 WAL 文件段,以便落后的备库仍能通过流复制获取它们。 如果备库落后超过该值,发送服务器可能会删除备库仍然需要的 WAL 段,复制连接就会中断。 如果指定值没有单位,则按兆字节计算。
max_slot_wal_keep_size #指定复制槽允许在 pg_wal 中保留的 WAL 文件最大总量。 若某个复制槽的 restart_lsn 落后当前 LSN 太多,使用该槽的备库可能因为缺少所需 WAL 而无法继续复制。 如果未指定单位,则按兆字节计算。默认值为 -1,表示不限制。
wal_sender_timeout #指定 WAL 发送进程在没有收到对端反馈时允许保持空闲的最长时间。 默认值为 60 秒。若指定值没有单位,则按毫秒计算。
track_commit_timestamp #指定是否跟踪事务提交时间戳。启用后可以查询提交时间,但会增加少量开销。 默认值为关闭。
这些参数主要用于主库上的同步复制行为。备库上的值对主库行为没有影响。
synchronous_standby_names #指定同步备库名称列表。事务提交时会等待这些备库确认接收 WAL。默认值为空,表示不启用同步复制。 语法可以指定优先级模式或基于仲裁的模式;如果未指定同步备库名称,提交不会等待复制。 此参数只能在 postgresql.conf 中或服务器命令行上设置。
vacuum_defer_cleanup_age #指定 VACUUM 和 HOT 更新在清理死行版本之前要推迟多少个事务。 默认值为 0,表示一旦死行版本不再对任何未提交事务可见,就尽快删除。 在支持热备的主库上,适当增大此值有助于减少备库查询因早期清理而被取消的概率。 此参数只能在 postgresql.conf 中或服务器命令行上设置。
也可以考虑在备库上设置 hot_standby_feedback,作为使用此参数的替代方案。
该设置不会阻止已经达到 old_snapshot_threshold 年龄的死行清理。
这些设置控制接收复制数据的备库服务器的行为。它们在主库上的值无关紧要。
primary_conninfo (string) #指定备库服务器用来连接发送服务器的连接字符串。此字符串的格式见 Section 32.1.1。如果该字符串中未指定任何选项,则会检查相应的环境变量 (见 Section 32.15)。如果环境变量也没有设置,则使用默认值。
连接字符串应指定发送服务器的主机名(或地址),如果端口号不同于备库的默认端口,也应一并指定。 还应指定一个在发送服务器上拥有适当权限的角色名(见 Section 26.2.5.1)。如果发送方要求密码认证,也需要提供密码。 密码既可以写在 primary_conninfo 字符串中,也可以放在备库服务器上的单独 ~/.pgpass 文件中(请使用 replication 作为数据库名)。 不要在 primary_conninfo 字符串中指定数据库名。
此参数只能在 postgresql.conf 文件中或服务器命令行上设置。 如果在 WAL 接收进程运行时更改了该参数,该进程会被信号通知关闭,并预期用新设置重新启动 (除非 primary_conninfo 为空字符串)。如果服务器不处于待机模式,这一设置无效。
primary_slot_name (string) #可选地指定一个现有复制槽,在通过流复制连接到发送服务器时使用,以控制上游节点上的资源移除 (见 Section 26.2.6)。 此参数只能在 postgresql.conf 文件中或服务器命令行上设置。 如果在 WAL 接收进程运行时更改了该参数,该进程会被信号通知关闭,并预期用新设置重新启动。 如果未设置 primary_conninfo,或者服务器不处于待机模式,这一设置无效。
promote_trigger_file (string) #指定一个触发文件,只要该文件存在,就会结束待机服务器中的恢复。 即使未设置该值,仍然可以通过 pg_ctl promote 或调用 pg_promote() 来提升待机服务器。 此参数只能在 postgresql.conf 文件中或服务器命令行上设置。
hot_standby (boolean) #指定是否允许在恢复期间连接并运行查询,详见 Section 26.4。 默认值是 on。此参数只能在服务器启动时设置。 它只在归档恢复或待机模式下生效。
max_standby_archive_delay (integer) #当热备处于活动状态时,此参数决定待机服务器在取消与即将应用的 WAL 记录冲突的待机查询之前应等待多久, 详见 Section 26.4.2。 max_standby_archive_delay 适用于从 WAL 归档读取 WAL 数据的情况 (因此不是当前 WAL)。 如果该值未指定单位,则按毫秒计算。默认值是 30 秒。 值为 -1 时,待机服务器会无限期等待冲突查询完成。 此参数只能在 postgresql.conf 文件中或服务器命令行上设置。
注意,max_standby_archive_delay 并不等同于查询在被取消前可以运行的最长时间; 它实际上是应用某个 WAL 段数据所允许的最大总时间。因此,如果某个查询已经在该 WAL 段前部造成了显著延迟, 后续发生冲突的查询就会得到少得多的宽限时间。
max_standby_streaming_delay (integer) #当热备处于活动状态时,此参数决定待机服务器在取消与即将应用的 WAL 记录冲突的待机查询之前应等待多久, 详见 Section 26.4.2。 max_standby_streaming_delay 适用于通过流复制接收 WAL 数据的情况。 如果该值未指定单位,则按毫秒计算。默认值是 30 秒。 值为 -1 时,待机服务器会无限期等待冲突查询完成。 此参数只能在 postgresql.conf 文件中或服务器命令行上设置。
注意,max_standby_streaming_delay 并不等同于查询在被取消前可以运行的最长时间; 它实际上是从主服务器接收到 WAL 数据后,允许用于应用这些数据的最大总时间。因此,如果某个查询已经造成了显著延迟, 后续发生冲突的查询在待机服务器追上进度之前会获得少得多的宽限时间。
wal_receiver_create_temp_slot (boolean) #指定在未配置可用的永久复制槽时,WAL 接收进程是否应在远端实例上创建一个临时复制槽 (使用 primary_slot_name)。 默认值是 off。此参数只能在 postgresql.conf 文件中或服务器命令行上设置。 如果在 WAL 接收进程运行时更改了该参数,该进程会被信号通知关闭,并预期用新设置重新启动。
wal_receiver_status_interval (integer) #指定待机服务器上的 WAL 接收进程向主服务器或上游待机服务器发送复制进度信息的最低频率, 可通过 pg_stat_replication 视图查看。 待机会报告它已经写入的最后一个预写式日志位置、已经刷盘的最后一个位置,以及已经应用的最后一个位置。 此参数的值表示两次报告之间允许的最长时间。每当写入或刷盘位置变化时,系统都会发送更新; 如果该参数的值非零,则也会按该参数指定的频率发送更新。 还有一些情况会在忽略该参数的情况下发送更新,例如现有 WAL 的处理完成时,或者 synchronous_commit 设置为 remote_apply 时。 因此,应用位置可能会比真实位置略微滞后。 如果该值未指定单位,则按秒计算。默认值是 10 秒。此参数只能在 postgresql.conf 文件中或服务器命令行上设置。
hot_standby_feedback (boolean) #指定热备是否会向主服务器或上游待机服务器发送关于当前在待机上执行的查询的反馈。 该参数可用于消除由清理记录引起的查询取消,但对于某些工作负载,也可能导致主服务器上的数据库膨胀。 反馈消息发送的频率不会高于 wal_receiver_status_interval 所允许的频率。 默认值是 off。此参数只能在 postgresql.conf 文件中或服务器命令行上设置。
如果使用级联复制,反馈会向上游传递,直到最终到达主服务器。待机服务器接收到的反馈除继续向上游转发之外, 不会有其他用途。
该设置不会覆盖主服务器上 old_snapshot_threshold 的行为; 如果待机上的快照超过了主服务器的年龄阈值,就可能变为无效,从而导致待机上的事务被取消。 这是因为 old_snapshot_threshold 的设计目标是对死行可能造成膨胀的时间提供一个绝对上限, 而待机服务器的配置会以其他方式破坏这一限制。
wal_receiver_timeout (integer) #终止超过此时间仍处于空闲状态的复制连接。这对接收端待机服务器检测主节点崩溃或网络中断很有用。 如果该值未指定单位,则按毫秒计算。默认值是 60 秒。 值为零会禁用超时机制。此参数只能在 postgresql.conf 文件中或服务器命令行上设置。
wal_retrieve_retry_interval (integer) #指定当所有来源(流复制、本地 pg_wal 或 WAL 归档)都无法提供 WAL 数据时, 待机服务器在再次尝试检索 WAL 数据之前应等待多长时间。 如果该值未指定单位,则按毫秒计算。默认值是 5 秒。 此参数只能在 postgresql.conf 文件中或服务器命令行上设置。
该参数在需要控制恢复中的节点等待新 WAL 数据可用的时间时非常有用。 例如,在归档恢复中,可以通过减小该参数的值来让系统更快地检测到新的 WAL 日志文件。 在 WAL 活动较少的系统上,增大该参数可以减少访问 WAL 归档所需的请求次数; 例如在云环境中,这样做会很有用,因为基础设施被访问的次数会被纳入计费或配额考虑。
这些设置控制逻辑复制订阅端的行为。它们在发布端上的值无关紧要。
请注意,wal_receiver_timeout、wal_receiver_status_interval 和 wal_retrieve_retry_interval 配置参数也会影响逻辑复制工作进程。
max_logical_replication_workers (integer) #指定逻辑复制工作进程的最大数量,其中包括应用工作进程和表同步工作进程。
逻辑复制工作进程来自 max_worker_processes 定义的进程池。
默认值是 4。此参数只能在服务器启动时设置。
max_sync_workers_per_subscription (integer) #每个订阅允许的最大同步工作进程数。该参数控制订阅初始化时或新增表时初始数据复制的并行度。
目前,每个表只能有一个同步工作进程。
同步工作进程来自 max_logical_replication_workers 定义的进程池。
默认值是 2。此参数只能在 postgresql.conf 文件中或服务器命令行上设置。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。