监控逻辑复制(pg_stat_subscription、应用错误、复制槽延迟)
PostgreSQL逻辑复制命令
-- Subscriber:
SELECT subname, pid, leader_pid, relid::regclass AS syncing_table, received_lsn, latest_end_lsn, now() - last_msg_receipt_time AS since_last_msg, latest_end_time FROM pg_stat_subscription;
SELECT subname, apply_error_count, sync_error_count, stats_reset FROM pg_stat_subscription_stats;
-- Publisher:
SELECT slot_name, plugin, database, active, wal_status,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS confirmed_lag,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_replication_slots WHERE slot_type = 'logical';作用
在订阅端显示 apply/tablesync worker、已接收和已确认的 LSN、最后消息时间以及累计的 apply/sync 错误数;在发布端显示逻辑复制槽未确认(confirmed_flush)的 WAL 及其保留的 WAL 总量。
适用场景
在建立逻辑复制期间、在升级/迁移切换时确认延迟接近零,以及用于错误告警。
注意
如果 pid 为 NULL,说明 apply worker 没有运行(订阅被禁用,或反复失败并重启);请检查服务器日志。apply_error_count 上升表示存在冲突。停滞的订阅会在发布端堆积 WAL 和 catalog_xmin;请监控发布端磁盘和系统目录膨胀。