CONFIGURATION PARAMETER复制 / 备库
hot_standby_feedback
指定一个热备机是否将会向主库或上游备库发送有关于备库上当前正被执行的查询的反馈。
Allows feedback from a hot standby to the primary that will avoid query conflicts.
布尔 重载生效 引入 9.1 现存至 20 devel 0 次默认值变更
版本轨迹
相对 PostgreSQL 17 无变化。
默认值变迁
已记录的默认值在 PostgreSQL 9.1–19 之间未变。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
指定一个热备机是否将会向主库或上游备库发送有关于备库上当前正被执行的查询的反馈。这个参数可以被用来消除由清理记录引起的查询取消,但是在某些负载下可能导致主库上的数据库膨胀。反馈消息的发送频度不会高于每个 wal_receiver_status_interval 周期发送一次。默认值是 off。这个参数只能在 postgresql.conf 文件中或在服务器命令行上设置。
如果使用级联复制,反馈将被向上游传递直到它最后到达主库。备库在接收到反馈之后除了传递给上游不会做任何其他操作。
请注意,如果备库上的时钟被向前或向后调整,反馈消息可能无法按要求的时间间隔发送。在极端情况下,由于该反馈机制基于时间戳,这可能导致主库长时间面临无法移除死元组的风险。
机制详解
启用后,备库会向主库或上游备库报告当前查询快照仍需要的可见性信息,使上游避免清理由这些查询仍可见的旧行版本。反馈发送频率不会高于 wal_receiver_status_interval。
避免清理冲突会把代价转移到主库:死亡行版本存活更久,表与索引膨胀以及后续 VACUUM 工作都会增加。在级联复制中反馈会继续向上传递,因此很下游的一个旧快照也可能影响主库。
该机制只缓解清理记录冲突,并不能消除全部热备冲突。DDL 锁、删除对象、表空间操作和某些页面级冲突仍会取消查询。无槽备库断开时反馈会中断,时钟跳变也可能影响发送时序。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
只有减少备库查询取消的收益高于主库膨胀风险时才启用。限制备库查询时长,监控事务年龄、死亡元组、表增长、VACUUM 进度和 pg_stat_database_conflicts;纯 HA 备库通常更重视及时重放。
-
OLAP分析与批处理
对长查询报表备库很有价值,但必须搭配工作负载超时和主库膨胀预算。如果分析快照经常阻止清理数小时,应考虑独立报表拓扑。
-
小规格低配实例与开发机
除非已证明查询取消是问题,否则从 off 开始。有限存储使主库膨胀风险更高;启用后应使用较短查询上限和积极监控。
常见问题
- 启用后忽略主库表或索引膨胀。
- 期待它阻止 DDL、锁、删除数据库或表空间冲突。
- 允许下游备库无限长查询长期阻止上游清理。
- 认为无槽备库断开期间反馈仍然有效。
- 分析反馈时序时忽略时钟跳变和 wal_receiver_status_interval。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 9.1 ← 9.0 新增此参数
PostgreSQL 9.1 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
| 版本 | 默认值 | 单位 | 上下文 | 类型 | 最小值 | 最大值 | 枚举值 |
|---|---|---|---|---|---|---|---|
| 9.1 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 9.2 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 9.3 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 9.4 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 9.5 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 9.6 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 10 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 11 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 12 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 13 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 14 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 15 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 16 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 17 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 18 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 19 | off |
— |
重载生效 |
布尔 |
— |
— |
— |
| 20 | — | — | — | 布尔 |
— | — | — |
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 备库 13 | |||||
hot_standby |
布尔 | 重启生效 | on |
101 次 | |
| 指定在恢复期间,你是否能够连接并运行查询,如第 26.4 节中所述。 | 现存 | ||||
hot_standby_feedback |
布尔 | 重载生效 | off |
— | |
| 指定一个热备机是否将会向主库或上游备库发送有关于备库上当前正被执行的查询的反馈。 | 现存 | ||||
max_standby_archive_delay |
整数 | 重载生效 | 30 s |
9.11 次 | |
| 当热备处于活动状态时,此参数确定备库在取消与即将应用的 WAL 条目冲突的备库查询之前应等待多长时间,如第 26.4.2 节中所述。 | 现存 | ||||
max_standby_streaming_delay |
整数 | 重载生效 | 30 s |
9.11 次 | |
| 当热备处于活动状态时,此参数确定备库在取消与即将应用的 WAL 条目冲突的备库查询之前应等待多长时间,如第 26.4.2 节中所述。 | 现存 | ||||
primary_conninfo |
字符串 | 重载生效 | 空字符串 |
131 次 | |
| 指定备库用来连接发送服务器的连接字符串。 | 现存 | ||||
primary_slot_name |
字符串 | 重载生效 | 空字符串 |
131 次 | |
| 可选地指定通过流复制连接到发送服务器时使用一个现有的复制槽来控制上游节点上的资源移除(见第 26.2.6 节)。 | 现存 | ||||
promote_trigger_file |
字符串 | 重载生效 | 空字符串 |
— | |
| 指定一个触发文件,该文件的存在会结束备库上的恢复。 | 于 16 移除 | ||||
recovery_min_apply_delay |
整数 | 重载生效 | 0 ms |
— | |
| 默认情况下,备库会尽快恢复来自发送服务器的 WAL 记录。 | 现存 | ||||
sync_replication_slots |
布尔 | 重载生效 | off |
— | |
| 使物理备库能够从主库同步逻辑故障切换槽,以便逻辑订阅者在故障切换后能够从新的主库恢复复制。 | 现存 | ||||
wal_receiver_create_temp_slot |
布尔 | 重载生效 | off |
— | |
| 指定在未使用 primary_slot_name 配置要使用的永久复制槽时,WAL 接收进程是否应在远程实例上创建临时复制槽。 | 现存 | ||||
wal_receiver_status_interval |
整数 | 重载生效 | 10 s |
— | |
| 指定在备库上的 WAL 接收进程向主库或上游备库发送有关复制进度的信息的最小频度,它可以使用 pg_stat_replication 视图看到。 | 现存 | ||||
wal_receiver_timeout |
整数 | 重载生效 | 1 min |
191 次 | |
| 中止处于非活动状态超过这个时间量的复制连接。 | 现存 | ||||
wal_retrieve_retry_interval |
整数 | 重载生效 | 5 s |
— | |
| 指定当从任何来源(物理流复制、本地 pg_wal 或者 WAL 归档)都得不到 WAL 数据时,备库应该等待多久才去重新尝试获取 WAL 数据。 | 现存 | ||||