PostgreSQL:备库的延迟问题处理步骤

目录标题

    • 1. 查看主备状态
      • 计算方式:
      • 实际情况:
      • 举个例子:
    • 2. 查看历史状态
    • 3. 分析日志文件
    • 4. 查看数据库层面的复制状态
    • 5. 检查活动事务
    • 6. 检查系统资源
    • 7. 检查网络状况
    • 8. 检查复制槽状态
    • 9. 检查未提交的两阶段事务

要排查 PostgreSQL 备库的延迟问题,您可以按照以下步骤进行:

1. 查看主备状态

  • 使用 patronictl list 命令:该命令会显示集群中各节点的角色、状态、时间线等信息。

    patronictl list
    

    该命令的输出将包括每个节点的角色、状态、时间线等信息,帮助您了解主备节点的当前状态。
    在这里插入图片描述

patronictl list 是 Patroni 提供的命令,用于显示当前 Patroni 集群的状态和信息。在输出结果中,Lag in MB 表示每个备库(replica)与主库(primary)之间的延迟,单位是 MB(兆字节)。

计算方式:

Lag in MB 通常是基于以下因素来计算的:

  1. WAL日志传输延迟:Patroni 使用 PostgreSQL 的流复制(streaming replication)机制,将主库上的 WAL(Write Ahead Log)日志传输到备库。在备库接收到 WAL 日志后,它会应用这些日志,保持与主库的同步。

  2. 日志差异Lag in MB 主要通过计算主库和备库之间的 WAL 日志差异来得出。这个差异通常由以下几个指标决定:

    • 主库的当前 WAL LSN(Log Sequence Number)
    • 备库已接收到的最新 WAL LSN

    备库的 Lag in MB 计算公式通常如下:

   \[\text{Lag in MB} = \frac{\text{Current WAL LSN} - \text{Replica WAL LSN}}{1024 \times 1024}\]

在这里插入图片描述

这里,Current WAL LSN 是主库当前的 WAL 位置(LSN),Replica WAL LSN 是备库上已应用的最新 WAL 位置。通过计算这两个 LSN 之间的差距,并将其转换为 MB,得出备库的延迟。

  1. 日志传输和应用时间
    • 传输延迟:从主库到备库的 WAL 日志传输时间。
    • 应用延迟:备库将接收到的 WAL 日志应用到数据库的时间。

实际情况:

Lag in MB 是一个近似值,表示备库的延迟量。它并不直接反映实际的数据延迟(即查询的响应时间),而是表示备库与主库之间的 WAL 日志差异。较大的延迟可能意味着备库未及时接收到或应用主库的 WAL 日志。

在实践中,Lag in MB 可以用于:

  • 监控备库同步的健康状况。
  • 发现复制延迟过大的情况。
  • 调整性能优化策略,避免备库滞后过长时间。

举个例子:

假设主库的 WAL LSN 是 0/10000000,而备库的 WAL LSN 是 0/08000000。那么它们之间的差异是 0/10000000 - 0/08000000 = 0/08000000。如果每个 WAL 页的大小是 8KB,那么可以计算出这个差异对应的延迟是:

\[
\text{Lag in MB} = \frac{(0/08000000)}{1024 \times 1024} = \text{具体的 MB 数值}
\]

在这里插入图片描述

这个值会以 Lag in MB 显示出来,通常在 Patroni 集群的状态监控中查看。

SELECT now(),application_name,pg_current_wal_lsn() AS current_wal_lsn,sent_lsn,pg_wal_lsn_diff(pg_current_wal_lsn(), sent_lsn)/1024/1024 AS lag_in_MB
FROM pg_stat_replication;

在这里插入图片描述

2. 查看历史状态

  • 使用 patronictl history 命令:该命令可以帮助您了解集群状态的变化历史,识别可能导致延迟的事件。

    patronictl history
    

    通过查看历史状态,您可以识别出集群状态变化的时间点,帮助定位可能导致延迟的事件。
    在这里插入图片描述

3. 分析日志文件

  • 检查主/备节点的 PostgreSQL 日志文件:日志文件通常位于 PostgreSQL 数据目录下的 pg_log 目录中。

    cd /pg_log
    

    在该目录下,您可以找到以日期命名的日志文件,如 postgresql-<日期>.log postgresql-<日期>.csv

    在这里插入图片描述

    archive_command 和 restore_command 等由PG调用的外部二进制的输出打在 .log 里面

  • 查找与复制相关的错误或警告信息:关注日志中是否有网络连接问题、磁盘空间不足等错误或警告信息。

    grep -i 'replication' postgresql-*.csv
    

    该命令将搜索所有日志文件中包含“replication”字样的行,帮助您快速定位与复制相关的问题。

4. 查看数据库层面的复制状态

  • 在主库上,执行以下 SQL 查询,查看复制状态

    SELECT * FROM pg_stat_replication;
    

    在这里插入图片描述

    SELECT (case pg_is_in_recovery() when 't' then null else pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn)::float end)/1024/1024 AS pg_location_diff_MB FROM pg_stat_replication;
    

    在这里插入图片描述
    在这里插入图片描述

    该查询会返回当前复制连接的状态信息,包括复制延迟等。

  • 在备库上,执行以下 SQL 查询,查看复制状态

    SELECT * FROM pg_stat_wal_receiver;
    

    该查询会返回备库接收 WAL 的状态信息,包括接收延迟等。

5. 检查活动事务

  • 在主库上,执行以下 SQL 查询,查看当前活动事务

    SELECT * FROM pg_stat_activity WHERE state = 'active';
    

    长时间运行的活动事务可能会干扰 WAL 复制过程,从而增加复制延迟。

  • 流复制

  • pg_stat_replication

6. 检查系统资源

  • 检查主备节点的 CPU、内存和磁盘 I/O 使用情况

    使用系统监控工具,如 tophtopiostat 等,查看系统资源的使用情况。

    top
    

    该命令将显示系统的实时资源使用情况,帮助您识别是否存在资源瓶颈。

  • top

  • htop

  • iostat

7. 检查网络状况

  • 确保主备节点之间的网络连接稳定,带宽充足

    使用网络监控工具,如 pingtraceroute 等,检查网络延迟和丢包情况。

    ping <备库IP地址>
    

    该命令将测试主库与备库之间的网络连接质量,帮助您识别网络问题。

8. 检查复制槽状态

  • 查看复制槽的状态

    SELECT slot_name, slot_type, database, active, active_pid FROM pg_replication_slots;
    

    如果 active 列为 false,说明复制槽未激活,可能导致 WAL 日志堆积。

9. 检查未提交的两阶段事务

  • 查看未提交的两阶段事务

    SELECT gid, prepared, owner, database, transaction AS xmin
    FROM pg_prepared_xacts
    ORDER BY age(transaction) DESC;
    

    未提交的两阶段事务会导致 WAL 日志无法清理,增加复制延迟。
    在这里插入图片描述

通过以上步骤,您可以全面排查 PostgreSQL 备库的延迟问题,找出可能的原因并采取相应的措施进行解决。

参考链接

  • PostgreSQL如何监控备库延迟_psql从库查看同步延迟
  • PostgreSQL数据库WAL日志空间大小以及不清理的原因深入分析
  • 主备同步存在多长时间的延迟_云数据库RDS
  • PostgreSQL流复制三(延迟备库)
  • 主从之间延迟过大如何优化?
  • PostgreSQL数据库参数优化建议
  • PostgreSQL 检查主从延迟mysql 查看主从延迟
  • 两阶段提交

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【重构谷粒商城】06:Maven快速入门教程

重构谷粒商城06——Maven快速入门教程 前言&#xff1a;这个系列将使用最前沿的cursor作为辅助编程工具&#xff0c;来快速开发一些基础的编程项目。目的是为了在真实项目中&#xff0c;帮助初级程序员快速进阶&#xff0c;以最快的速度&#xff0c;效率&#xff0c;快速进阶到…

【Python】错误异常

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Python 文章目录 1. 错误和异常的概念1.1 错误1.2 异常 2. 常见的内置异常类型2.1 ZeroDivisionError2.2 IndexError2.3 KeyError2.4 TypeError 3. 异常处理机制3.1 try-except 语句3.2 try-except-else 语句3.3 try-except-fin…

Win11 远程 连接 Ubuntu20.04(局域网)

Win11 远程 连接 Ubuntu20.04(局域网&#xff09; 0. Ubuntu 开启共享1. Ubuntu系统中安装RDP服务器2.windows中连接使用方式1&#xff1a;远程桌面连接(winr: mstsc)方式2&#xff1a;mobaXterm 3 问题远程连接后出现黑屏 参考文献: 0. Ubuntu 开启共享 在ubunt设置中&#x…

visutal studio 2022使用qcustomplot基础教程

编译 下载&#xff0c;2.1.1版支持到Qt6.4 。 拷贝qcustomplot.h和qcustomplot.cpp到项目源目录&#xff08;Qt project&#xff09;。 在msvc中将它俩加入项目中。 使用Qt6.8&#xff0c;需要修改两处代码&#xff1a; L6779 # if QT_VERSION > QT_VERSION_CHECK(5, 2, …

ElasticSearch详解

声明 内容来源尚硅谷知识星球谷粒随享项目&#xff0c;部分概念性的内容&#xff0c;就使用对应文档填写了&#xff0c;若有侵权联系作者删除。 检索模块 技术栈&#xff1a;ElasticSearch ElasticSearch介绍 1.1 elasticsearch 简介 官网: https://www.elastic.co/ Ela…

250214-java类集框架

引言 类集框架本质上相当于是容器&#xff0c;容器装什么东西由程序员指定 1.单列集合 单列集合是list和set&#xff0c;list的实现类有ArrayList和LinkedList&#xff0c;前者是数组实现&#xff0c;后者是链表实现。list和set&#xff0c;前者有序、可重复&#xff0c;后者…

Vue3(3)

一.具体业务功能实现 &#xff08;1&#xff09;登录注册页面 [element-plus 表单 & 表单校验] 功能需求说明&#xff1a; 1.注册登录 静态结构 & 基本切换 2.注册功能 (校验 注册) 3.登录功能 (校验 登录 存token) import request from /utils/request// 注册接…

数据结构 day05

数据结构 day05 5. 队列5.3. 链式队列5.3.1. 特征5.3.2. 代码实现 6. 双向链表6.1. 特性6.2. 代码实现 5. 队列 5.3. 链式队列 5.3.1. 特征 逻辑结构&#xff1a;线性结构 存储结构&#xff1a;链式存储 操作&#xff1a;创建、入列、出列、判空、清空 5.3.2. 代码实现 头文…

Uniapp 短视频去水印解析工具开发实现

最近搞了一个有意思的小工具——短视频去水印解析器&#xff01;这玩意儿可以把短视频中的水印给抹掉&#xff0c;还能提取视频、封面等资源。整个项目用了 Uniapp 开发&#xff0c;做完后体验了一下&#xff0c;发现还挺顺手。今天就来跟大家聊聊实现思路和代码细节~ 需求分析…

HTML【详解】input 标签

input 标签主要用于接收用户的输入&#xff0c;随 type 属性值的不同&#xff0c;变换其具体功能。 通用属性 属性属性值功能name字符串定义输入字段的名称&#xff0c;在表单提交时&#xff0c;服务器通过该名称来获取对应的值disabled布尔值禁用输入框&#xff0c;使其无法被…

什么是MVC?什么是SpringMVC?什么是三层架构?

文章目录 应用分层什么是MVC?什么是 SpringMVC&#xff1f;三层架构三层架构和MVC的关系 应用分层 在讲解什么是MVC之前&#xff0c;先来理解一下什么是应用分层。 应用分层是一种软件开发设计思想&#xff0c;将应用程序划分成N个层次&#xff0c;每个层次都分别负责自己…

【深度学习】深度学习和强化学习算法——深度 Q 网络DQN

深度 Q 网络&#xff08;Deep Q-Network, DQN&#xff09; 详解 什么是DQNDQN 的背景DQN 训练流程 2 DQN 的核心思想2.1 经验回放&#xff08;Experience Replay&#xff09;2.2 目标网络&#xff08;Target Network&#xff09;2.3 ε-贪心策略&#xff08;ε-Greedy Policy&a…

CSS flex布局 列表单个元素点击 本行下插入详情独占一行

技术栈&#xff1a;Vue2 javaScript 简介 在实际开发过程中有遇到一个场景&#xff1a;一个list&#xff0c;每行个数固定&#xff0c;点击单个元素后&#xff0c;在当前行与下一行之间插入一行元素详情&#xff0c;便于更直观的查看到对应的数据详情。 这种情形&#xff0c…

Deepseek本地部署

一&#xff0c;Deepseek本地部署方式 有UI且简单&#xff1a;LM Studio、Text Generation WebUI。 高效率但无UI&#xff1a;Ollama、LLama.cpp、Tabby。 二&#xff0c;通过Ollama本地部署Deepseek 1&#xff0c;什么是Ollama Ollama是一个开源的 LLM&#xff08;大型语言…

Django 创建表时 “__str__ ”方法的使用

在 Django 模型中&#xff0c;__str__ 方法是一个 Python 特殊方法&#xff08;也称为“魔术方法”&#xff09;&#xff0c;用于定义对象的字符串表示形式。它的作用是控制当对象被转换为字符串时&#xff0c;应该返回什么样的内容。 示例&#xff1a; 我在初学ModelForm时尝…

最新智能优化算法: 中华穿山甲优化( Chinese Pangolin Optimizer ,CPO)算法求解23个经典函数测试集,MATLAB代码

中华穿山甲优化&#xff08; Chinese Pangolin Optimizer &#xff0c;CPO&#xff09;算法由GUO Zhiqing 等人提出&#xff0c;该算法的灵感来自中华穿山甲独特的狩猎行为&#xff0c;包括引诱和捕食行为。 算法流程如下&#xff1a; 1. 开始 设置算法参数和最大迭代次数&a…

【云安全】云原生- K8S etcd 未授权访问

什么是etcd&#xff1f; etcd 是一个开源的分布式键值存储系统&#xff0c;主要用于存储和管理配置信息、状态数据以及服务发现信息。它采用 Raft 共识算法&#xff0c;确保数据的一致性和高可用性&#xff0c;能够在多个节点上运行&#xff0c;保证在部分节点故障时仍能继续提…

解锁建造者模式:Java 编程中的对象构建秘籍

系列文章目录 后续补充~~~~ 文章目录 一、引言二、建造者模式原理剖析2.1 定义与概念2.2 模式结构与角色2.2.1 产品&#xff08;Product&#xff09;2.2.2 建造者&#xff08;Builder&#xff09;2.2.3 具体建造者&#xff08;ConcreteBuilder&#xff09;2.2.4 指挥者&#xf…

ChatGPT行业热门应用提示词案例-AI绘画类

AI 绘画指令是一段用于指导 AI 绘画工具&#xff08;如 DALLE、Midjourney 等&#xff09;生成特定图像的文本描述。它通常包含场景、主体、风格、色彩、氛围等关键信息&#xff0c;帮助 AI 理解创作者的意图&#xff0c;从而生成符合要求的绘画作品。 ChatGPT 拥有海量的知识…

JUC并发—4.wait和notify以及Atomic原理

大纲 1.wait()与notify()实现一个简易的内存队列 2.wait()与notify()的底层原理 3.分布式存储系统NameNode机制介绍 4.分布式存储系统的edits log机制介绍 5.分布式存储系统的NameNode实现 6.分布式存储系统的创建目录功能的实现 7.edits log的全局txid机制和双缓冲机制…