pg_stat_replication的使用详解
什么是pg_stat_replication
pg_stat_replication是PostgreSQL的一个系统视图(View),它展示了当前所有的流复制(replication)的信息。
如何查询pg_stat_replication
直接查询pg_stat_replication即可,如下所示:
SELECT * FROM pg_stat_replication;
执行该命令后,可以获得如下信息:
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag | replay_lag | sync_priority | sync_state
-------+----------+-------------+--------------------------------+-------------+-----------------+-------------+-------------------------------+--------------+-----------+-----------+-----------+-----------+------------+-----------+-----------+------------+---------------+------------
21326 | 16384 | replication | walreceiver | 192.168.0.1 | | 44266 | 2018-06-13 23:10:15.638867+08 | | streaming | 223528752 | 223528752 | 223528752 | 223528752 | | | | 0 | async
(1 row)
pg_stat_replication的字段释义
pg_stat_replication的字段意义如下:
- pid:流复制的进程号
- usesysid:系统用户ID
- usename:使用流复制的用户
- application_name:使用流复制的应用
- client_addr:复制数据的客户端IP地址
- client_hostname:复制数据的客户端主机名
- client_port:复制数据的客户端端口
- backend_start:流复制进程启动时间
- backend_xmin:流复制进程目前所处理的也就是最新的xid值(事实上这一列已经成为了实际使用中无用且导致误解的列,可以直接忽略掉)
- state:流复制状态
- sent_lsn:已发送到备库的WAL段号
- write_lsn:主库上的WAL写入位置
- flush_lsn:主库上已经被flush到磁盘的WAL位置
- replay_lsn:备库已经应用到的LSN
- write_lag:已经写入但未被备库应用的WAL段数
- flush_lag:已经flush但未被备库应用的WAL段数
- replay_lag:已经应用但未被备库确认的WAL段数
- sync_priority:同步备库指数(0是异步,大于0的都是同步)
- sync_state:同步状态(async:异步,quorum:集群同步,sync:数据完全同步)
示例1:监测备库是否与主库同步
使用pg_stat_replication可以简单并有效地检查备库是否与主库同步,操作如下:
- 查询pg_stat_replication:
SELECT * FROM pg_stat_replication;
- 检查输出中sync_state是否等于sync,如果是则备库与主库同步,否则未同步。
示例2:计算WAL延迟
pg_stat_replication也可以用于计算WAL延迟,操作如下:
- 查询pg_stat_replication:
SELECT * FROM pg_stat_replication;
- 计算主库已经写入但未被备库应用的WAL段数:
SELECT (sent_lsn - write_lsn) / 1024/ 1024 AS "write_lag(MB)" FROM pg_stat_replication;
- 计算主库已经flush但未被备库应用的WAL段数:
SELECT (sent_lsn - flush_lsn) / 1024/ 1024 AS "flush_lag(MB)" FROM pg_stat_replication;
- 计算已经应用但未被备库确认的WAL段数:
SELECT (write_lsn - replay_lsn) / 1024/ 1024 AS "replay_lag(MB)" FROM pg_stat_replication;
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pgsql之pg_stat_replication的使用详解 - Python技术站