PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

26.4. 热备用 #

26.4.1. 查询与回放冲突解决

通过在备库的 postgresql.conf 中设置 hot_standby = on,备用节点在持续回放 WAL 的同时能够直接接纳外部客户端发起的只读 SQL 连接(如 SELECT、COPY TO),实现极致的读写分离负载分摊。

26.4.1. 查询与回放冲突解决 #

在热备节点上,当客户端正在执行的长只读查询所需的行版本或锁资源,恰好与主库刚同步过来的排他性物理变更(例如主库 VACUUM 释放了数据页、或删除了某张数据表)发生争用冲突时,系统必须在“让只读查询继续执行”与“让回放进程继续推进”之间做出仲裁。

通过配置参数 ??? 与 ???,能够指定回放进程至多等待只读慢查询多少毫秒。一旦超时,备库会主动抛出查询取消错误(canceling statement due to conflict with recovery)以保障备库数据不会无限滞后于主库。此外,开启参数 ??? 能够让备库向主库反向通报当前只读事务的最老活跃 XID,从而在源头上阻止主库过早清理备库仍依赖的旧版本行。