这些参数可以在发送复制数据给一个或多个后备服务器的主控/主要服务器上设置。注意除了这些参数之外,在主控服务器上必须设置合适的wal_level,并且也启用可选的 WAL 归档。这些参数值与后备服务器无关,尽管你可能希望为了准备好一个后备机转变成主控机来设置这些参数。
synchronous_standby_names (string)
这个参数指定一个支持同步复制的后备服务器的列表。可能会有一个或者多个活动的同步后备服务器,在这些后备服务器确认收到它们的数据之后,等待提交的事务将被允许继续下去。同步后备服务器是那些名字出现在这个列表中,并且当前已连接并且正在实时流传输数据(如pg_stat_replication视图中streaming 的状态所示)的服务器。指定多个同步备用可以实现非常高的可用性并防止数据丢失。用于此目的的备用服务器的名称是备用数据库的application_name设置, 如备用数据库的连接信息中所设置的。在物理复制备用的情况下, 这应该在recovery.conf的primary_conninfo 设置中设置;默认值是walreceiver。对于逻辑复制,可以在订阅的连接信息中设置,并且它默认为订阅名称。对于其他复制流消费者,请参阅他们的文档。这个参数使用下面的语法之一来指定一个后备服务器列表:[FIRST] num_sync ( standby_name [, ...] ) ANY num_sync ( standby_name [, ...] ) standby_name [, ...]其中num_sync 是事务需要等待其回复的同步后备服务器的数量,standby_name 是一个后备服务器的名称。FIRST和ANY 指定从列出的服务器中选择同步备用数据库的方法。关键字FIRST加上num_sync,指定基于优先级的同步复制,并使事务提交等待,直到它们的WAL记录被复制到根据其优先级进行选择的 num_sync同步备用数据库。 例如,FIRST 3 (s1, s2, s3, s4) 的设置将导致每个提交等待来自从备用服务器 s1、s2、s3和s4 中选择出来的三个更高级备用服务器的回复。其名称出现在列表前面的备用数据库被赋予更高的优先级,并将被视为同步。 在列表后面出现的其他备用服务器代表潜在的同步备用服务器。如果任何当前的同步备用服务器因任何原因断开连接, 它将立即被次最高优先级的备用机器替换。关键字FIRST是可选的。关键字ANY加上num_sync, 指定基于数量的同步复制,并使事务提交等待,直到它们的WAL记录被复制到 至少num_sync 个列出的备用服务器。例如,ANY 3 (s1, s2, s3, s4) 的设置将导致每个提交至少被s1、s2、 s3 和s4中的任意三个备用服务器回复处理。FIRST和ANY是大小写无关的。 如果这些关键字用作备用服务器的名称,那么 standby_name必须是双引号引用的。它与第一个使用FIRST和num_sync 等于1的语法相同。例如,FIRST 1 (s1, s2)和s1, s2 具有相同的含义:选择s1或s2作为同步备用。特殊项匹配任何备用服务器名称。没有机制来强制备用名称的唯一性。在重复的情况下, 匹配的备用数据库之一将被视为较高优先级,但确切地说哪一个是不确定的。注意每一个standby_name* 都应该具有合法 SQL 标识符的形式,除非它是*。 如果必要你可以使用双引号。但是注意在比较 standby_name 和后备机应用程序名称时是大小写不敏感的(不管有没有双引号)。如果这里没有指定同步后备机名称,那么同步复制不能被启用并且事务提交将不会等待复制。这是默认的配置。即便当同步复制被启用时,个体事务也可以被配置为不等待复制,做法是将synchronous_commit参数设置为local或off。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。
vacuum_defer_cleanup_age (integer)
指定VACUUM和HOT更新在清除死亡行版本之前,应该推迟多久(以事务数量计)。默认值是零个事务,表示死亡行版本将被尽可能快地清除,即当它们不再对任何打开的事务可见时尽快清除。在一个支持热后备服务器的主服务器上,你可能希望把这个参数设置为一个非零值。这允许后备机上的查询有更多时间来完成而不会由于先前的行清除产生冲突。但是,由于该值是用在主服务器上发生的写事务的数目衡量的,很难预测对后备机查询可用的附加时间到底是多少。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。你也可以考虑设置后备服务器上的hot_standby_feedback作为使用这个参数的一种替代方案。这无法阻止已经达到old_snapshot_threshold 所指定年龄的死亡行被清除。