PostgreSQL如何监控备库延迟

方案1:

主库查询

SELECT * FROM pg_stat_replication;

NOTE1:PostgreSQL 10及以后版本 pg_stat_replication视图增加了write_lag,flush_lag,replay_lag。分别表示从库wal日志写入(写入到操作系统缓存)延迟,从库wal日志刷新延迟(wal日志刷入磁盘),从库wal日志应用延迟。

NOTE2:如果从库跟主库复制已经出现问题,比如备库需要的wal日志在主库已经被删除,则主库中该表为空
2024-05-23 14:13:56.375 CST [22978] FATAL:  could not receive data from WAL stream: ERROR:  requested WAL segment 0000000200000141000000C8 has already been removed

方案2:

从库查询

NOTE1:postgres_exporter 0.14 及 0.15 版本的备库延迟监控策略

NOTE2:主库宕机,或者主备wal日志同步异常时,pg_last_wal_receive_lsn () = pg_last_wal_replay_lsn () 则在从库查询也会显示无延迟。

NOTE3:pg_last_xact_replay_timestamp 函数显示备库最近WAL日志应用时间, 通过与当前时间比较可粗略计算主备库延时,这种方式的优点是即使主库宕机,也可以大概判断主备延时。 缺点是如果主库上只有读操作,主库不会发送WAL日志流到备库,pg_last_xact_replay_timestamp函数返回的结果就是一个静态的时间, 这个公式的判断结果就不严谨了

SELECT
	CASE
		WHEN NOT pg_is_in_recovery() THEN 0
                WHEN pg_last_wal_receive_lsn () = pg_last_wal_replay_lsn () THEN 0
		ELSE GREATEST (0, EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp())))
	END AS lag,
	CASE
		WHEN pg_is_in_recovery() THEN 1
		ELSE 0
	END as is_replica;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渔夫数据库笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值