说明本文所述基于标准流复制环境非 DCF 模式。1. 流复制参数1.1 主库侧wal_level必须hot_standby或archive才能开流复制建议固定hot_standby。gaussdb show wal_level; wal_level ------------- hot_standby (1 row)max_wal_senders最大 walsender 进程数备机数 × 1~2建议 ≥ 10gaussdb show max_wal_senders; max_wal_senders ----------------- 20 (1 row)wal_keep_segments未建槽时保留的 WAL 量如果创建了复制槽可不依赖此参数。gaussdb show wal_keep_segments; wal_keep_segments ------------------- 128 (1 row)synchronous_commit提交等备机到哪一步off/local/on/remote_write/remote_apply高一致场景用on或remote_apply高性能用remote_writegaussdb show synchronous_commit; synchronous_commit -------------------- on (1 row)synchronous_standby_names同步备机列表一主两备常用 ANY 1(node1,node2)显示 quorumgaussdb show synchronous_standby_names; synchronous_standby_names --------------------------- ANY 1(dn_6002,dn_6003) (1 row)most_available_sync决定同步备全断时主库是否继续服务。gaussdb show most_available_sync; most_available_sync --------------------- off (1 row)wal_sender_timeoutwalsender 心跳超时时间。gaussdb show wal_sender_timeout; wal_sender_timeout -------------------- 6s (1 row)enable_stream_replication流复制总开关gaussdb show enable_stream_replication; enable_stream_replication --------------------------- on (1 row)replconninfoN定义主备节点间的网络连接拓扑包含本地与远程的 IP、服务端口以及心跳端口。gaussdb show replconninfo1; replconninfo1 ----------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------- localhost192.168.182.138 localport30101 localheartbeatport30105 localservice30104 remotehost192 .168.182.139 remoteport30101 remoteheartbeatport30105 remoteservice30104 (1 row)max_replication_slots控制主节点上最多可以同时创建的复制槽数量。通常设置为备机节点数 逻辑订阅数 预留冗余。gaussdb show max_replication_slots; max_replication_slots ----------------------- 20 (1 row)enable_slot_log是否开启复制槽信息的持久化日志防止主库异常重启后丢失备库的消费进度。gaussdb show enable_slot_log; enable_slot_log ----------------- on (1 row)1.2 备库参数hot_standby备库是否允许只读。gaussdb show hot_standby; hot_standby ------------- on (1 row)hot_standby_feedback控制备库是否向主库反馈当前回放快照信息。默认值为off主库vacuum不受备库影响但备库长查询可能遭遇snapshot too old错误。gaussdb show hot_standby_feedback; hot_standby_feedback ---------------------- off (1 row)建议设置为 on 的场景备库承担只读业务报表 / 查询 / 接口备库有超过 30 s 的 SQL主库表update/delete 频繁出现过snapshot too oldwal_receiver_timeout备库等待主库发送日志的超时时间。gaussdb show wal_receiver_timeout; wal_receiver_timeout ---------------------- 6s (1 row)2. 流复制监控视图2.1pg_stat_replication用来在主库上查看复制状态。--查看复制状态 gaussdb SELECT application_name, client_addr, state, sync_state, sender_sent_location, receiver_write_location, receiver_flush_location, receiver_replay_location FROM pg_stat_replication; application_name | client_addr | state | sync_state | sender_sent_location | receiver_write_location | receiver_flush_location | receiver_replay_location ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- WalSender to Standby[dn_6003] | 192.168.182.140 | Streaming | Quorum | 0/A4D5148 | 0/A4D5148 | 0/A4D5148 | 0/A4D5148 WalSender to Standby[dn_6002] | 192.168.182.139 | Streaming | Quorum | 0/A4D5148 | 0/A4D5148 | 0/A4D5148 | 0/A4D5148 (2 rows) -- 查看复制延迟 SELECT pid,usename,client_addr,state,sync_state,sync_priority, pg_xlog_location_diff(pg_current_xlog_location(),receiver_write_location) write_delay, pg_xlog_location_diff(pg_current_xlog_location(),receiver_flush_location) flush_delay, pg_xlog_location_diff(pg_current_xlog_location(),receiver_replay_location) replay_dely FROM pg_stat_replication; pid | usename | client_addr | state | sync_state | sync_priority | write_delay | flush_delay | replay_dely ------------------------------------------------------------------------------------------------------------------------- 139801312884480 | rdsAdmin | 192.168.182.140 | Streaming | Quorum |1 |0 |0 |0 139801266222848 | rdsAdmin | 192.168.182.139 | Streaming | Quorum |1 |0 |0 |0 (2 rows)write_delay主当前 WAL 位置与备机已写入磁盘位置的字节差。值为0表示写盘没有延迟。flush_delay主当前 WAL 位置与备机已持久化刷新Flush到磁盘位置的字节差。值为0表示已完全持久化。replay_dely主当前 WAL 位置与备机已重放Replay到数据库中的位置的字节差。值为0表示备机数据已完全追平无延迟。直观衡量备机的同步时长select now() AS now, coalesce(pg_last_xact_replay_timestamp(), now()) replay, extract(EPOCH FROM (now() - coalesce(pg_last_xact_replay_timestamp(), now()))) AS diff; now | replay | diff ------------------------------------------------------------------ 2026-09-12 20:41:32.1480608 | 2026-09-12 20:41:32.1480608 |0 (1 row)pg_last_xact_replay_timestamp函数显示备库最近 WAL 日志应用时间。如果diff的值接近0说明备机数据非常实时如果diff数值持续增大说明备机复制出现了延迟可能由于网络卡顿、大事务重放慢或主机写入压力过大。2.2dbe_perf.global_replication_stat一次性查询整个集群所有分片的流复制状态适合分布式集群SELECT node_name, client_addr AS standby_ip, state, sync_state, sync_priority AS priority, sender_sent_location AS master_sent_lsn, receiver_flush_location AS standby_flush_lsn, receiver_replay_location AS standby_replay_lsn FROM dbe_perf.global_replication_stat; node_name | standby_ip | state | sync_state | priority | master_sent_lsn | standby_flush_lsn | standby_replay_lsn ----------------------------------------------------------------------------------------------------------------------------- dn_6001_6002_6003 | 192.168.182.140 | Streaming | Quorum |1 | 0/A6C44C0 | 0/A6C44C0 | 0/A6C44C0 dn_6001_6002_6003 | 192.168.182.139 | Streaming | Quorum |1 | 0/A6C44C0 | 0/A6C44C0 | 0/A6C44C0 (2 rows)2.3dbe_perf.global_recovery_status监控主备恢复状态与日志流控信息。主要用来评估当主库发生故障时备机恢复数据并接管业务所需的时间RTO以及当前的流控状态。gaussdb select *from dbe_perf.global_recovery_status; node_name | standby_node_name | source_ip | source_port | dest_ip | dest_port | current_rto | target_rto | current_sleep_time --------------------------------------------------------------------------------------------------------------------------------------------- dn_6001_6002_6003 | dn_6002 | 192.168.182.138 |30101 | 192.168.182.139 |54272 |2 |60 |0 dn_6001_6002_6003 | dn_6003 | 192.168.182.138 |30101 | 192.168.182.140 |44264 |0 |60 |0 (2 rows)current_rto当前预估的恢复时间目标秒。反映当前备机落后主库的日志量需要多少时间才能重放完毕。target_rto系统设定的目标 RTO 阈值用于触发流控保护。current_sleep_time当前的流控睡眠时间。当主备延迟过高、突破 RTO 限制时主库会通过此参数对写入进行降速/流控值为 0 表示无流控限制。2.4pg_replication_slots查看所有复制槽包括物理槽和逻辑槽。gaussdb SELECT slot_name, plugin, slot_type, datoid, active, restart_lsn FROM pg_replication_slots;gaussdb- gaussdb- gaussdb- gaussdb- gaussdb- gaussdb- slot_name | plugin | slot_type | datoid | active | restart_lsn ----------------------------------------------------------- dn_6003 || physical |0 | t | 0/9A188D58 dn_6002 || physical |0 | t | 0/9A188D58 (2 rows) select slot_name, plugin, slot_type, datoid, database, active, xmin, pg_size_pretty(pg_xlog_location_diff(CASE WHEN pg_is_in_recovery() THEN pg_last_xlog_receive_location() ELSE pg_current_xlog_location() END , restart_lsn)) AS retained_bytes from pg_replication_slots; slot_name | plugin | slot_type | datoid | database | active | xmin | retained_bytes ------------------------------------------------------------------------------ dn_6003 || physical |0 || t || 0 bytes dn_6002 || physical |0 || t || 0 bytes (2 rows)retained_bytes该复制槽积压的 WAL 日志大小。总结本篇整理的流复制相关参数和视图不仅适用于 GaussDB同样适用于 原生 PostgreSQL 及多数 PostgreSQL 系国产数据库如 openGauss、MogDB、VastBase 等。转载实战派K8SDB
