PostgreSQL实战之物理复制和逻辑复制(四)

news2024/11/19 9:20:17

目录

PostgreSQL实战之物理复制和逻辑复制(四)

4 流复制监控

4.1 pg_stat_replication

4.2 监控主备延迟

4.3 pg_stat_wal_receiver


PostgreSQL实战之物理复制和逻辑复制(四)

4 流复制监控

4.1 pg_stat_replication

        主库上主要监控WAL发送进程信息,pg_stat_replication视图显示WAL 发送进程的详细信息,这个视图对于流复制的监控非常重要,前一小节测试写性能过程中此视图的一个时间点数据如下所示:

postgres=#SELECT *  FROM pg_stat_replication ;
-[RECORD 1 ]--—-----+-—----------------------
pid                 |  7683
usesysid            |  16384
usename             |  repuser
application_name    |  node2
client_addr         |  192.168.28.75
client_hostname     |  
client_port         |  57870
backend_start       |  2017-09-05 11:50:31.629468+08
backend_xmin        |  
state               |  streaming          
sent_lsn            |  3/643CB568 
write_lsn           |  3/643CB568
flush_lsn           |  3/643CB488
replay_lsn          |  3/643CB030
write_lag           |  00:00:00.000224
flush_lag           |  00:00:00.001562
replay_lag          |  00:00:00.006596
sync_priority       |  1
sync_state          |  sync

视图中的主要字段解释如下:

pid: WAL发送进程的进程号。
usename: WAL发送进程的数据库用户名。
application_name :连接WAL发送进程的应用别名,此参数显示值为备库recovery.conf配置文件中primary_conninfo参数application_name选项的值。
client_addr:连接到WAL发送进程的客户端IP地址,也就是备库的IP。backend_start: WAL发送进程的启动时间。
state:显示WAL发送进程的状态,startup表示WAL进程在启动过程中; catchup表示备库正在追赶主库;streaming表示备库已经追赶上了主库,并且主库向备库发送WAL日志流,这个状态是流复制的常规状态;backup表示通过pg_basebackup正在进行备份; stopping表示 WAL发送进程正在关闭。
sent_lsn: WAL发送进程最近发送的WAL日志位置。
write_Isn :备库最近写入的WAL日志位置,这时WAL日志流还在操作系统缓存中,还没写入备库 WAL日志文件。
flush_Isn:备库最近写入的WAL日志位置,这时WAL日志流已写入备库WAL日志文件。replay_lsn:备库最近应用的WAL日志位置。
write_lag :主库上WAL日志落盘后等待备库接收WAL日志(这时WAL日志流还没写入备库 WAL日志文件,还在操作系统缓存中)并返回确认信息的时间。
flush_lag:主库上WAL日志落盘后等待备库接收WAL日志(这时WAL日志流已写入备库WAL日志文件,但还没有应用WAL日志)并返回确认信息的时间。replay_lag:主库上WAL日志落盘后等待备库接收WAL日志(这时WAL日志流已写入备库WAL日志文件,并且已应用WAL日志)并返回确认信息的时间。
sync_priority:基于优先级的模式中备库被选中成为同步备库的优先级,对于基于quorum的选举模式此字段则无影响。
sync_state:同步状态,有以下状态值,async表示备库为异步同步模式; potential表示备库当前为异步同步模式,如果当前的同步备库宕机,异步备库可升级成为同步备库;sync表示当前备库为同步模式;quorum表示备库为quorum standbys 的候选。

4.2 监控主备延迟

同步流复制和异步流复制主备库之间的延迟是客观存在的,事实上当流复制主库、备库机器负载较低的情况下主备延迟通常能在毫秒级,数据库越繁忙或数据库主机负载越高主备延迟越大,有两个维度衡量主备库之间的延迟:通过WAL延迟时间衡量,通过WAL日志应用延迟量衡量,下面详细介绍。
方式一:通过WAL延迟时间衡量
WAL的延迟分为write延时、flush延时、replay延时,分别对应pg_stat_replication的write_lag、flush_lag、replay_lag字段,上一节已经详细解释了这三个字段,通过备库WAL日志接收延时和应用延时判断主备延时,在流复制主库上执行如下SQL:

postgres=# SELECT pid, usename,client_addr,state,write_lag,flush_lag, replay_lag
           FROM pg_stat_replication;
-[ RECORD 1 ]—---------------
pid         | 7683
usename     | repuser
client_addr | 192.168.28.75
state       | streaming
write_lag   | 00:00:00.000997
flush_lag   | 00:00:00.002008
replay_lag  | 00:00:00.002916

对于一个有稳定写事务的数据库,备库收到主库发送的WAL日志流后首先是写入备库主机操作系统缓存,之后写人备库WAL日志文件,最后备库根据WAL日志文件应用日志,因此这种场景下write_lag、flush_lag 和 replay_lag大小关系如下所示:
replay_lag > flush_lag > write_lag
以上查询中flush_lag时间为0.2008毫秒,replay_lag时间为0.2916毫秒,replay_lag延时大于flush_lag延时很好理解,因为只有备库接收的WAL日志流写入WAL日志文件后才能应用WAL,因此replay_lag要大于flush_lag。
write_lag、flush_lag、replay_lag 为 PostgreSQL10版本新增字段,10版本前pg_statreplication视图不提供这三个字段,但是也有办法监控主备延时,在流复制备库执行以下SQL:

postgres=# SELECT EXTRACT(SECOND FROM now ()- pg_last_xact_replay_timestamp());
    date_part
----------------
    0.002227
( 1 row)

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

方式二:通过WAL日志应用延迟量衡量
通过流复制备库WAL的应用位置和主库本地WAL写入位置之间的WAL日志量能够准确判断主备延时,在流复制主库执行以下SQL:

pg_current_wal_lsn 函数显示流复制主库当前WAL日志文件写入的位置,pg_wal_Isn_diff 函数计算两个WAL日志位置之间的偏移量,返回单位为字节数,以上内容显示流复制备库WAL的 write延迟560字节,flush延迟896字节,replay延迟1272字节,这种方式有个缺点,当主库宕掉时,此方法行不通。
方式三:通过创建主备延时测算表方式
这种方法在主库上创建一张主备延时测算表,并定时往表插入数据或更新数据,之后在备库上计算这条记录的插入时间或更新时间与当前时间的差异来判断主备延时,这种方法不是很严谨,但很实用,当主库宕机时,这种方式依然可以大概判断出主备延时。

4.3 pg_stat_wal_receiver

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

postgres=# SELECT * FROM pg_stat_wal_receiver;
-[ RECORD 1 ]---------+-----------------
pid                   |  22573
status                |  streaming
receive_start_lsn     |  3/2D000000
receive_start_tli     |  1
received_lsn          |  3/852DC428
received_tli          |  1
last_msg_send_time    |  2017-09-06 15:35:28.178167+08
last_msg_receipt_time |  2017-09-06 15:35:28.177706+08
latest_end_lsn        |  3/852DC508
latest_end_time       |  2017-09-0615:35:28.178167+08
slot_name             |  
conninfo              |  user=repuser passfile=/home/postgres/.pgpass dbname=replication
    host=192.168.28.74 port=1921 application_name=node2 fallback_application_name=walreceiver sslmode=disable sslcompression=1 target_session_attrs=any

以上主要字段信息如下:
pid:WAL接收进程的进程号。status: WAL接收进程的状态。
receive_start_lsn: WAL接收进程启动后使用的第一个 WAL日志位置。received_lsn:最近接收并写入WAL日志文件的WAL位置。
last_msg_send_time :备库接收到发送进程最后一个消息后,向主库发回确认消息的发送时间。
last_msg_receipt_time:备库接收到发送进程最后一个消息的接收时间。
conninfo: WAL接收进程使用的连接串,连接信息由备库SPGDATA目录的recovery.
conf配置文件的 primary_conninfo参数配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dual-Path Fusion:遥感融合

DPFN: A Dual-Path Fusion Network for Pan-Sharpening (一种用于泛锐化的双路径融合网络) 大多数现有深上用于pan-sharpening方法的几个公认的问题,如光谱失真和足够的空间纹理增强。针对这些问题,提出了一种新的双路径融合网络…

浙大全日制英文MBA项目申请的五大关键词

2023级开始,浙大全日制英文MBA项目全面登场!对于这个项目的了解,大多数考生还不是特别清楚,因为很多考生更加关注的是“全日制”而非英文MBA本身的情况,如果还是带着以往对中文全日制MBA项目的理解来申请这个项目&…

《Linux运维实战:使用Percona Server for MongoDB物理备份与恢复Mongodb数据》

一、备份与恢复方案 Percona Server for MongoDB 是一个免费的、增强的、完全兼容的、源代码可用的、带有企业级功能的MongoDB Community Edition的替代品。它不需要对MongoDB应用程序或代码进行更改。Percona Server for MongoDB支持版本 > 3.6 。 说明:当前环…

【通知】《生成对抗网络GAN原理与实践》代码开源,勘误汇总!

有三上个月出版了新书《生成对抗网络GAN:原理与实践》,Generative Adversarial Networks(中文名生成对抗网络,简称GAN)自从被提出来后,其发展就非常迅猛,几乎已经被应用于所有CNN可以使用的领域…

Js逆向教程21-vscode无环境联调

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 Js逆向教程21-vscode无环境联调 一、环境安装 电脑安装visual code 电脑安装node.js 二、nodejs环境调试 vscode打开一个文件夹并创…

valet-windows

现在win可以用valet了,安装开始 环境参考 1》安装PHP 版本7.4.32 2》安装composer 2.4 安装valet 1》composer global require cretueusebiu/valet-windows 2》valet install 3》这里有2中方法,本人选择link valet link [name] 浏览器中输入 name.te…

[附源码]计算机毕业设计健身房预约平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

20221210英语学习

今日新词: authorize v.授权, 批准 layoff n.临时解雇, 操作停止, 活动停止期间 jazz adj.爵士音乐的, 不调和的, (色彩等)花哨恶俗的 overlap v.(与…)交叠,部分重叠;时间交叠;有共同之处 subject n.…

Matlab中的数据类型

数据类型 MATLAB中的数据类型主要包括数值类型、逻辑类型、字符串、函数句柄、结构体和
单元数组类型。这6种基本的数据类型都是按照数组形式存储和操作的。另外,MATLAB
中还有两种用于高级交叉编程的数据类型,分别是用户自定义的面向对象的用户类类型…

【考研数据】二.2021年BJTU计算机学院考研录取数据分析

欢迎订阅本专栏:《北交计算机复试经验》 订阅地址:https://blog.csdn.net/m0_38068876/category_12110003.html 【考研数据】一.2020年BJTU计算机学院考研录取数据分析【考研数据】二.2021年BJTU计算机学院考研录取数据分析【考研数据】三.2022年BJTU计算机学院考研录取数据分…

web端 无插件 实时视频预览

一,需求 项目需要在web上对相机采集的图片进行编码成视频,然后进行实时预览。以前调研的方案有以下两种: 1,客户端安装ocx插件,浏览器调用插件进行解码,渲染。但是浏览器支持有限,只有ie支持&…

【建议收藏】五年程序员写给小白看的Python基础知识

32000字的长文,建议先收藏后阅读,如果能够点赞转发那就太感谢啦~ 话不多说,我们正式开始。 安装 Python 在开始学习 python 之前,我们先要安装 python。安装 python 的步骤根据不同的操作系统会有些差异,以下是几种…

TensorFlow之分类模型-3

1 基本概念 2 文本分类与情感分析 3 TF模型仓库的使用 本章节主要使用TensorFlow模型仓库与keras技术框架联合开发对IMDB数据集的机器学习,TensorFlow模型仓库提供模型直接下载使用,链接地址如下所示: https://hub.tensorflow.google.cn/ …

关于远程debug的一些事

首先,远程debug需要项目的启动,我这边采用的是docker构建镜像的方式,也可以使用传统jar包命令的方式;然后需要明确一个东西,就是远程debug暴露的端口不是项目端口,而是jvm端口。 这边给出我构建镜像使用的d…

Neodynamic JSPrintManager for Blazor

Neodynamic JSPrintManager for Blazor NeodynamicJSprintManager for Blazor是一个客户端打印和扫描方案,设计用于任何Blazor服务器和WebAssembly项目。通过编写纯.NET C#代码,JSPrintManager for Blazor允许您轻松地将原始数据、文本和本机命令以及已知…

一个简单的HTML网页——传统节日春节网页(HTML+CSS)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

JUC并发编程02——AQS源码剖析

1.AQS介绍 相信每个Java Coder 都使用过或者至少听说过AQS, 它是抽象队列同步器AbstractQueuedSynchronizer 的简称,在juc包下。它提供了一套可用于实现锁同步机制的标准框架,其维护了一个volatile修饰的共享变量state和 一个FIFO(先进先出)线程等待队列…

SpringBoot实战:整合Swagger3实现在线Api文档

Swagger-UI 是 HTML、Javascript、CSS 的一个集合,可以动态地根据注解生成在线 Api 文档;swagger-bootstrap-UI 则可以美化 swagger-ui,页面更清爽!本篇就是实现 SpringBoot 整合 Swagger3 实现在线 Api 文档。 项目源码实现前分支…

物联网开发笔记(58)- 使用Micropython开发ESP32开发板之控制2.90寸电子墨水屏模块黑白套件

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制2.90寸电子墨水屏模块(黑白套件)。 二、环境 ESP32 2.90寸 电子墨水屏模块 Thonny IDE 几根杜邦线 接线方法: 三、墨水屏驱动 此处注意注意:不同的型号、不同厂家的墨…

web前端期末大作业 基于HTML+CSS+JavaScript绿色的在线教育平台网站响应式企业网站模板

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…