DBAtlas · 数据库运维图谱

在备库上监控 WAL 接收和回放延迟(pg_stat_wal_receiver)

PostgreSQL复制

命令

-- Run on the standby:
SELECT pg_is_in_recovery() AS in_recovery,
       pg_last_wal_receive_lsn() AS receive_lsn,
       pg_last_wal_replay_lsn() AS replay_lsn,
       pg_size_pretty(pg_wal_lsn_diff(pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn())) AS replay_backlog,
       now() - pg_last_xact_replay_timestamp() AS last_replay_age,
       pg_get_wal_replay_pause_state() AS pause_state;
SELECT pid, status, sender_host, sender_port, slot_name, received_tli, flushed_lsn, latest_end_lsn, now() - last_msg_receipt_time AS since_last_msg FROM pg_stat_wal_receiver;

作用

显示备库已接收多少 WAL、已应用多少(回放积压)、最后回放事务的时长、回放是否暂停,以及 walreceiver 连接状态(哪个主库、复制槽、timeline、最后消息时间)。

适用场景

用于在主库不可达或级联备库上诊断延迟;出现 'standby behind' 告警时,区分网络(接收)问题和回放(I/O、冲突)问题。

注意

如果 pg_stat_wal_receiver 不返回任何行,说明备库没有进行流复制(从归档获取或已断开)。即使主库没有写入,last_replay_age 也会增长;请结合 receive_lsn/replay_lsn 的差值来解读。如果接收在推进而回放积压在增长,说明备库上有长查询(max_standby_streaming_delay)或存在 I/O 瓶颈。

在 DBAtlas 中打开 →

相关内容