SuperAPI AI 工具集

postgres-errors-replication-lag

数据与分析

查看项目

更新于 10-15 22:18

技能介绍

用途:排查 PostgreSQL 复制相关故障,覆盖流复制(物理备库)延迟、复制槽滞留 WAL 导致主库磁盘写满、逻辑订阅卡住不推进三类问题。

主要能力:

  1. 定位延迟来源。在主库查询 pg_stat_replication,用 replay_lag(时间间隔)和 pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn)(字节数)同时衡量副本陈旧程度;在备库用 now() - pg_last_xact_replay_timestamp() 查看重放延迟。无对应行表示备库未连接。
  2. 判断槽是否危险。查询 pg_replication_slots 的 active、wal_status、safe_wal_size:active=false 且 WAL 仍被固定即有磁盘风险;wal_status 为 unreserved 表示即将释放,lost 表示槽已失效、消费者无法续用。
  3. 建议设置 ALTER SYSTEM SET max_slot_wal_keep_size = '64GB'; 并 SELECT pg_reload_conf();(v13+),为槽设置 WAL 保留上限,避免非活跃槽写满磁盘。
  4. 清理废弃槽。确认 active=false 且消费者确已消失后,执行 SELECT pg_drop_replication_slot('old_standby_slot');。
  5. 恢复卡住的逻辑订阅。冲突会使 apply worker 停止且不自愈。优先修复订阅端数据让 worker 自动重试;万不得已时用 ALTER SUBSCRIPTION my_sub SKIP (LSN = '<finish_lsn>');(v15+),但会丢弃整个事务、可能导致订阅端不一致。

使用方式:按决策树区分流复制与逻辑复制选择查询视图,遵循文中只读查询与恢复步骤,命令保持原样执行。

适用场景:副本返回陈旧数据、主库 pg_wal 增长、备库报 could not start WAL streaming、逻辑订阅停止应用、订阅端日志重复报错、设计复制监控与告警阈值。

限制:不用于从零搭建复制(发布、基础备份、槽创建)、与复制无关的连接或认证失败、健康槽下正常写入负载的 WAL 增长。SKIP 会丢弃整笔事务,存在数据不一致风险;max_slot_wal_keep_size 需 v13+。具体版本兼容与更多细节资料未完整提供。