暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

PostgreSQL流复制监控

原创 贾勇智 2021-10-26
1224

PostgreSQL流复制监控

流复制部署完成后,需要监控流复制主库、备库状态。

一、pg_stat_replication

主库主要监控wal发送进程消息,不含级联备库信息
select * from pg_stat_replication;

-[ RECORD 1 ]----+------------------------------
pid              | 108330       WAL 发送方进程的进程 ID
usesysid         | 16384     登录到此 WAL 发送方进程的用户的 OID
usename          | repuser
application_name | pgsql_node2
client_addr      | 192.168.150.166
client_hostname  | 
client_port      | 42108
backend_start    | 2021-10-25 11:07:48.624659+08
backend_xmin     | 
state            | streaming
sent_lsn         | 0/850039D0
write_lsn        | 0/850039D0
flush_lsn        | 0/850039D0
replay_lsn       | 0/850039D0
write_lag        | 
flush_lag        | 
replay_lag       | 
sync_priority    | 0
sync_state       | async
reply_time       | 2021-10-25 17:21:24.601309+08

https://www.postgresql.org/docs/12/monitoring-stats.html#PG-STAT-REPLICATION-VIEW

二、监控主库延迟

方式一、通过WAL延迟时间衡量

select pid,usename,client_addr,state,write_lag,flush_lag,replay_lag from pg_stat_replication;

pg10前使用:
select extract(second from now() - pg_last_xact_replay_timestamp());

方式二、通过WAL日志应用延迟量衡量

通过流复制备库WAL的应用位置和主库本地WAL写入位置之间的WAL日志量能够准确判断主备延时,在流复制主库执行以下SQL:
select pid,usename,client_addr,state,
pg_wal_lsn_diff(pg_current_wal_lsn(),write_lsn) write_delay,
pg_wal_lsn_diff(pg_current_wal_lsn(),flush_lsn) flush_delay,
pg_wal_lsn_diff(pg_current_wal_lsn(),replay_lsn) replay_dely
from pg_stat_replication;

通过创建主备延时测算方式

此方法不算严谨,但很实用。通过在主库创建一张主备测算表,并定时往表插入数据或更新数据,之后在备库上计算这条记录的插入时间或更新时间与当前时间的差异来判断主备延时。

三、pg_stat_wal_receiver

pg_stat_replication视图显示WAL发送进程的详细信息,WAL接收进程也有相应的视图,如下所示:
select * from pg_stat_wal_receiver;

四、相关系统函数

pg_is_in_recovery() 判断是否为主库或备库

select pg_is_in_recovery(); —返回 t 表示备库 ,f 表示主库

pg_last_wal_receive_lsn() 显示备库最近接收的WAL日志的位置

select pg_last_wal_receive_lsn();

pg_last_wal_replay_lsn() 备库最近应用WAL日志的位置

select pg_last_wal_replay_lsn();

pg_last_xact_replay_timestamp() 显示备库最近事务的应用时间

select pg_last_xact_replay_timestamp();

select pg_current_wal_lsn() 显示主库WAL当前写入位置

select select pg_current_wal_lsn();

pg_wal_lsn_diff 计算两个WAL日志位置的偏移量

select pg_wal_lsn_diff(‘3/940001B0’,‘940001A0’);

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论