当前位置: 首页 > news >正文

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 查看主从延迟
  • 两阶段提交

相关文章:

PostgreSQL 备库的延迟问题

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

力扣-二叉树-226 翻转二叉树

思路 利用递归的思路 代码 class Solution { public:TreeNode* invertTree(TreeNode* root) {if(root nullptr){return root;}swap( root->right, root->left);invertTree(root->left);invertTree(root->right);return root;} };...

基于SpringBoot的在线车辆租赁信息管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的不断发展和人们生活水平的提高&#xff0c;汽车租赁行业迎来了前所未有的发展机遇。传统的汽车租赁方式往往存在流程繁琐、信息不透明等问题&#xff0c;难以满足现代消费者对于便捷、高效服务的需求。因此&…...

掌握 systemd:Linux 服务管理的核心工具

1. 什么是 systemd&#xff1f; 定义&#xff1a;systemd 是 Linux 系统的初始化系统&#xff08;init system&#xff09;和服务管理器&#xff0c;用于替代传统的 SysVinit。核心目标&#xff1a; 加速系统启动&#xff08;并行化任务&#xff09;。统一管理服务、日志、挂载…...

【信息系统项目管理师-案例真题】2019下半年案例分析答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一【问题 1】(6 分)【问题 2‍ 】(8 分)【问题 3‍ 】(11 分)试题二【问题 1】‍(5分)【问题 2】‍ (14 分)【问题 3‍ 】(6 分)试题三【问题 1】(8 分)【问题 2‍ 】(6 分)【问题 3】‍ (8 分)【问题 4‍ …...

C/C++程序的内存是如何开辟的?

&#x1f4ac; 欢迎讨论&#xff1a;在阅读过程中有任何疑问&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;如果你觉得这篇文章对你有帮助&#xff0c;记得点赞、收藏&#xff0c;并分享给更多对C语言感兴…...

日志结构化处理:PO对象toString日志转JSON工具

日志结构化处理&#xff1a;PO对象toString日志转JSON工具 1. 解决的问题2. 下载地址 在Java项目中&#xff0c;PO&#xff08;Plain Old Java Object&#xff09;对象遍布各个角落&#xff0c;且常常伴随着大量的日志记录需求。传统的做法是通过toString方法直接打印这些对象&…...

python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注

【1】引言 前序学习进程中&#xff0c;已经使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注&#xff0c;这种标注沿着图像的轮廓进行&#xff0c;比较细致。相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;六十四&#xff09;使用…...

大疆无人机需要的kml文件如何制作kml导出(大疆KML文件)

大疆无人机需要的轨迹kml文件&#xff0c;是一种专门的格式&#xff0c;这个kml里面只有轨迹点&#xff0c;其它的属性信息都不需要。 BigemapPro提供了专门的大疆格式输出&#xff0c; 软件这里下载 www.bigemap.com 安装后&#xff0c;kml导入如下图&#xff1a; 然后选择…...

ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet

集合族谱 在这些集合中&#xff0c;仅有vector和hashtable是线程安全的&#xff0c;其内部方法基本都有synchronized修饰。 ArrayList 底层采用Object数组实现&#xff0c;实现了RandomAccess接口因此支持随机访问。插入删除操作效率慢。 ArrayList需要一份连续的内存空间。 A…...

手动配置IP

手动配置IP&#xff0c;需要考虑四个配置项&#xff1a; 四个配置项 IP地址、子网掩码、默认网关、DNS服务器 IP地址&#xff1a;格式表现为点分十进制&#xff0c;如192.168.254.1 子网掩码&#xff1a;用于区分网络位和主机位 【子网掩码的二进制表达式一定是连续的&#…...

idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡

idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡 问题 idea编译器 安装copilot AI工具 实际操作 在 IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤如下&#xff1a; 打开 IntelliJ IDEA&#xff1a; 打开你的 IntelliJ IDEA 应用…...

游戏引擎学习第101天

回顾当前情况 昨天的进度基本上完成了所有内容&#xff0c;但我们还没有进行调试。虽然我们在运行时做的事情大致上是对的&#xff0c;但还是存在一些可能或者确定的bug。正如昨天最后提到的&#xff0c;既然现在时间晚了&#xff0c;就不太适合开始调试&#xff0c;所以今天我…...

css块级元素和行内元素区别

在CSS中&#xff0c;元素可以分为两大类&#xff1a;块级元素&#xff08;Block-level elements&#xff09;和行内元素&#xff08;Inline elements&#xff09;。这两种元素在网页布局中起着不同的作用&#xff0c;主要体现在它们的显示方式、尺寸控制、以及与其他元素的交互…...

JAVA安全—Shiro反序列化DNS利用链CC利用链AES动态调试

前言 讲了FastJson反序列化的原理和利用链&#xff0c;今天讲一下Shiro的反序列化利用&#xff0c;这个也是目前比较热门的。 原生态反序列化 我们先来复习一下原生态的反序列化&#xff0c;之前也是讲过的&#xff0c;打开我们写过的serialization_demo。代码也很简单&…...

什么是信息熵

信息熵 公式 一个离散随机变量 X X X的可能取值为 X x 1 , x 2 , . . . , x n Xx_1,x_2,...,x_n Xx1​,x2​,...,xn​&#xff0c;而对应的概率为 p i p ( X x i ) p_ip(Xx_i) pi​p(Xxi​),如下 x 1 x_1 x1​ x 2 x_2 x2​ x 3 x_3 x3​ x 4 x_4 x4​… x n x_n xn​p( x …...

使用API有效率地管理Dynadot域名,清除某一文件夹中域名的默认DNS设置

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…...

2.11 sqlite3数据库【数据库的相关操作指令、函数】

练习&#xff1a; 将 epoll 服务器 客户端拿来用 客户端&#xff1a;写一个界面&#xff0c;里面有注册登录 服务器&#xff1a;处理注册和登录逻辑&#xff0c;注册的话将注册的账号密码写入数据库&#xff0c;登录的话查询数据库中是否存在账号&#xff0c;并验证密码是否正确…...

当 LSTM 遇上 ARIMA!!

大家好&#xff0c;我是小青 ARIMA 和 LSTM 是两种常用于时间序列预测的模型&#xff0c;各有优劣。 ARIMA 擅长捕捉线性关系&#xff0c;而 LSTM 擅长处理非线性和长时间依赖的关系。将ARIMA 和 LSTM 融合&#xff0c;可以充分发挥它们各自的优势&#xff0c;构建更强大的时…...

kali连接xshell

1.先保证宿主机&#xff1a;以太网适配器 VMware Network Adapter VMnet8 和kali&#xff08;net 模式&#xff09;在同一个网段 windows VMnet8开启 查看是否是自动获取ip ipv4 和ipv6一样的 查看 windows VMnet8的IPv4的地址 查看 kali 的IP地址 window ping的结果&#xf…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...