衡量 pgactive 成员之间的复制延迟
您可以使用以下查询来查看 pgactive
成员之间的复制延迟。在每个 pgactive
节点上运行此查询以了解全部信息。
app=> SELECT * FROM pgactive.pgactive_get_replication_lag_info();
│-[ RECORD 1 ]--------+---------------------------------------------
│node_name | node2-app
│node_sysid | 7481018224801653637
│application_name | pgactive:7481018224801653637:send
│slot_name | pgactive_16385_7481018224801653637_0_16385__
│active | t
│active_pid | 783486
│pending_wal_decoding | 0
│pending_wal_to_apply | 0
│restart_lsn | 0/2108150
│confirmed_flush_lsn | 0/2154690
│sent_lsn | 0/2154690
│write_lsn | 0/2154690
│flush_lsn | 0/2154690
│replay_lsn | 0/2154690
│-[ RECORD 2 ]--------+---------------------------------------------
│node_name | node1-app
│node_sysid | 7481018033434600853
│application_name | pgactive:7481018033434600853:send
│slot_name | pgactive_16385_7481018033434600853_0_16385__
│active | t
│active_pid | 783488
│pending_wal_decoding | 0
│pending_wal_to_apply | 0
│restart_lsn | 0/20F5AD0
│confirmed_flush_lsn | 0/214EF68
│sent_lsn | 0/214EF68
│write_lsn | 0/214EF68
│flush_lsn | 0/214EF68
│replay_lsn | 0/214EF68
至少需要监控以下诊断信息:
- active
-
在 active 为 false 时设置警报,这表示该插槽当前未被使用(订阅用户实例已断开与发布者的连接)。
- pending_wal_decoding
-
在 PostgreSQL 的逻辑复制中,WAL 文件以二进制格式存储。发布者必须解码这些 WAL 更改并将其转换为逻辑更改(例如插入、更新或删除操作)。
指标 pending_wal_decoding 显示发布者端等待解码的 WAL 文件的数量。
该数量可能因以下因素增大:
-
当未连接订阅用户时,active 状态将为 false,并且 pending_wal_decoding 将增大
-
该插槽处于 active 状态,但发布者无法跟上 WAL 更改的量
-
- pending_wal_to_apply
-
指标 pending_wal_apply 表示订阅用户端等待应用的 WAL 文件的数量。
有以下几个因素可能会阻止订阅用户应用更改,并且可能导致出现磁盘已满的情况:
-
架构差异 – 例如,当您在名为 sample 的表的 WAL 流中做出了更改,但订阅用户端却不存在该表时
-
主键列中的值已更新
-
辅助唯一索引可能会导致数据差异
-