14 - How to check replication status
The people using PostgreSQL and the Streaming Replication feature seem to ask many of the same questions:
1. How best to monitor Streaming Replication?
2. What is the best way to do that?
3. Are there alternatives, when monitoring on Standby, to using the pg_stat_replication view on Master?
4. How should I calculate replication lag-time, in seconds, minutes, etc.?
In light of these commonly asked questions, I thought a blog would help. The following are some methods I’ve found to be useful.
Monitoring is critical for large infrastructure deployments where you have Streaming Replication for:
1. Disaster recovery
2. Streaming Replication is for High Availability
3. Load balancing, when using Streaming Replication with Hot Standby
PostgreSQL has some building blocks for replication monitoring, and the following are some important functions and views which can be use for monitoring the replication:
1. pg_stat_replication view on master/primary server.
This view helps in monitoring the standby on Master. It gives you the following details:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
pid: Process id of walsender processusesysid: OID of user which is used for Streaming replication.usename: Name of user which is used for Streaming replicationapplication_name: Application name connected to masterclient_addr: Address of standby/streaming replicationclient_hostname: Hostname of standby.client_port: TCP port number on which standby communicating with WAL senderbackend_start: Start time when SR connected to Master.state: Current WAL sender state i.e streamingsent_location: Last transaction location sent to standby.write_location: Last transaction written on disk at standbyflush_location: Last transaction flush on disk at standby.replay_location: Last transaction flush on disk at standby.sync_priority: Priority of standby server being chosen as synchronous standbysync_state: Sync State of standby (is it async or synchronous). |
e.g.:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
postgres=# select * from pg_stat_replication ;-[ RECORD 1 ]----+---------------------------------pid | 1114usesysid | 16384usename | repuserapplication_name | walreceiverclient_addr | 172.17.0.3client_hostname |client_port | 52444backend_start | 15-MAY-14 19:54:05.535695 -04:00state | streamingsent_location | 0/290044C0write_location | 0/290044C0flush_location | 0/290044C0replay_location | 0/290044C0sync_priority | 0sync_state | async |
2. pg_is_in_recovery() : Function which tells whether standby is still in recovery mode or not.
e.g.
|
1
2
3
4
5
|
postgres=# select pg_is_in_recovery(); pg_is_in_recovery------------------- t(1 row) |
3. pg_last_xlog_receive_location: Function which tells location of last transaction log which was streamed by Standby and also written on standby disk.
e.g.
|
1
2
3
4
5
|
postgres=# select pg_last_xlog_receive_location(); pg_last_xlog_receive_location------------------------------- 0/29004560(1 row) |
4. pg_last_xlog_replay_location: Function which tells last transaction replayed during recovery process. e.g is given below:
|
1
2
3
4
5
|
postgres=# select pg_last_xlog_replay_location(); pg_last_xlog_replay_location------------------------------ 0/29004560(1 row) |
5. pg_last_xact_replay_timestamp: This function tells about the time stamp of last transaction which was replayed during recovery. Below is an example:
|
1
2
3
4
5
|
postgres=# select pg_last_xact_replay_timestamp(); pg_last_xact_replay_timestamp---------------------------------- 15-MAY-14 20:54:27.635591 -04:00(1 row) |
Above are some important functions/views, which are already available in PostgreSQL for monitoring the streaming replication.
So, the logical next question is, “What’s the right way to monitor the Hot Standby with Streaming Replication on Standby Server?”
If you have Hot Standby with Streaming Replication, the following are the points you should monitor:
1. Check if your Hot Standby is in recovery mode or not:
For this you can use pg_is_in_recovery() function.
2.Check whether Streaming Replication is working or not.
And easy way of doing this is checking the pg_stat_replication view on Master/Primary. This view gives information only on master if Streaming Replication is working.
3. Check If Streaming Replication is not working and Hot standby is recovering from archived WAL file.
For this, either the DBA can use the PostgreSQL Log file to monitor it or utilize the following functions provided in PostgreSQL 9.3:
|
1
2
|
pg_last_xlog_replay_location();pg_last_xact_replay_timestamp(); |
4. Check how far off is the Standby from Master.
There are two ways to monitor lag for Standby.
i. Lags in Bytes: For calculating lags in bytes, users can use thepg_stat_replication view on the master with the functionpg_xlog_location_diff function. Below is an example:
|
1
|
pg_xlog_location_diff(pg_stat_replication.sent_location, pg_stat_replication.replay_location) |
which gives the lag in bytes.
ii. Calculating lags in Seconds. The following is SQL, which most people uses to find the lag in seconds:
|
1
2
3
4
|
SELECT CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location() THEN 0 ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp()) END AS log_delay; |
Including the above into your repertoire can give you good monitoring for PostgreSQL.
I will in a future post include the script that can be used for monitoring the Hot Standby with PostgreSQL streaming replication.
Since 9.6 this is a lot easier as it introduced the function pg_blocking_pids() to find the sessions that are blocking another session.
So you can use something like this:
How to check blocking processes in postgresql
select pid,
usename,
pg_blocking_pids(pid) as blocked_by,
query as blocked_query
from pg_stat_activity
where cardinality(pg_blocking_pids(pid)) > 0;
14 - How to check replication status的更多相关文章
- java.lang.IllegalStateException: Failed to check the status of the service
java.lang.IllegalStateException: Failed to check the status of the service com.pinyougou.sellergoods ...
- DTM initialization: failure during startup recovery, retry failed, check segment status (cdbtm.c:1603)
安装greenplum集群出现以下错误: 20160315:13:49:16:025696 gpinitsystem:h95:jason-[INFO]:-Checking configuration ...
- check failed status == cudnn_status_success (4 vs. 0) cudnn_status_internal_error
Check failed: error == cudaSuccess (30 vs. 0) unknown error 这个有可能是显存不足造成的,或者网络参数不对造成的 check failed ...
- 关于Failed to check the status of the service com.taotao.service.ItemService. No provider available fo
原文:http://www.bubuko.com/infodetail-2250226.html 项目中用dubbo发生: Failed to check the status of the serv ...
- Check failed: status == CUBLAS_STATUS_SUCCESS (11 vs. 0) CUBLAS_STATUS_MAPPING_ERROR
I0930 21:23:15.115576 30918 solver.cpp:281] Learning Rate Policy: multistepF0930 21:23:17.263314 310 ...
- CUDA报错: Cannot create Cublas handle. Cublas won't be available. 以及:Check failed: status == CUBLAS_STATUS_SUCCESS (1 vs. 0) CUBLAS_STATUS_NOT_INITIALIZED
Error描述: aita@aita-Alienware-Area-51-R5:~/AITA2/daisida/ssd-github/caffe$ make runtest -j8 .build_re ...
- node js fcoin api 出现 api key check fail : {"status":1090,"msg":"Illegal API signature"}
//主区://ft / btc 不支持市价 买入数量不能小于5个FT 买//ft / eth 支持市价 最小买入eth不能小于0.01 买//ft / usdt 支持市价 最小买入usdt不能小于10 ...
- dubbo Failed to check the status of the service com.user.service.UserService. No provider available for the service
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'u ...
- springboot 报错nested exception is java.lang.IllegalStateException: Failed to check the status of the service xxxService No provider available for the service
spring: dubbo:#关闭所有服务的启动时检查:(没有提供者时报错) consumer: check: false timeout: 3000
随机推荐
- Huber Loss
Huber Loss 是一个用于回归问题的带参损失函数, 优点是能增强平方误差损失函数(MSE, mean square error)对离群点的鲁棒性. 当预测偏差小于 δ 时,它采用平方误差, 当预 ...
- Prisma GraphQL 服务器 生产者 "https://www.prisma.io"
Prisma 一个 GraphQL 服务器 生产者 "https://www.prisma.io" , 关注一下
- GitHub界面初识
现在很多 HR 在招聘程序员的需求都会提到「有 Github 项目者优先」,大部分求职者也会在简历中附上 Github 链接. 作为一个专业的 HR,即便不懂代码,也不能被一个链接唬住.今天我就手 ...
- 转-filebeat 源码分析
背景 在基于elk的日志系统中,filebeat几乎是其中必不可少的一个组件,例外是使用性能较差的logstash file input插件或自己造个功能类似的轮子:). 在使用和了解filebeat ...
- Git常用的操作
1.git使用的常规操作 git pull——>编辑——>git add——>git commit——>git push 用git add把文件添加进去,实际上就是把文 ...
- 【原创】大数据基础之Impala(2)实现细节
一 架构 Impala is a massively-parallel query execution engine, which runs on hundreds of machines in ex ...
- R leaflet
setRepositories()#1 chooseCRANmirror()#2 ibrary(leaflet)#学习地址:http://rstudio.github.io/leaflet/marke ...
- echarts tree 树型图层级距离设置
网上找了半天,没有找到设置层级距离的属性,默认是自动适应的,无奈只能改源码,分享出来希望可以帮到有相同需求的... 上github下载echarts源码包,打开src=>chart=>tr ...
- Mysql基本架构及查询流程
mysql体系结构简单概述: Connectors:接入方,支持协议很多 Management Serveices & Utilities:系统管理和控制工具例如:备份恢复,mysql复制集群 ...
- Flask简述
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...