PostgreSQL restartpoint 原理详解

news2024/11/16 0:03:30

背景

大部分人对 PG 的 checkpoint 机制会熟悉一点,但是对 restartpoint 却不太熟悉,网上介绍这方面的文章也比较少。因此,本文将以 PG 14.7 的社区代码为基础,介绍 PG 中的 restartpoint 机制。

原理介绍

什么是 restartpoint

在了解 restartpoint 前,首先需要知道 checkpoint,可以参考这篇博文 https://blog.csdn.net/zxwsbg/article/details/115013885?spm=1001.2014.3001.5502

简单的介绍如下所示

  • checkpoint: 主库用的,用来定期刷脏及其他一些功能,crash 后实例自动去找最新的一个 checkpoint ,从其中记录的 redo point 的 WAL 日志位点开始向后进行 redo;
  • restartpoint:备库用的,和主库的 checkpoint 功能类似,备库的 checkpointer 进程会定期的做 restartpoint 进行刷脏,并记录一些位点,如果 crash 了直接从对应的位点开始向后进行 redo。

restartpoint 触发机制

有两种触发机制:

  1. 当距离做上一个 restartpoint 已经过去了 checkpoint_timeout 秒,并且主库又做了新的 checkpoint ,这时触发 restartpoint;
  2. 备机 WAL 大小快要超过 max_wal_size 参数设定的值;

restartpoint 做了什么

checkpoint XLOG 重做

在上一节的触发机制 1 中,主库做了一个 checkpoint(非关机时的 checkpoint ),会写一条 XLOG_CHECKPOINT_ONLINE 类型日志。
备机的 startup 进程在 xlog_redo 函数中,会针对这种类型日志做日志回放,并在 RecoveryRestartPoint 函数中保存主库该 checkpoint 的相关位点信息——checkpoint 位点、redo point 位点等。
在这里插入图片描述

CreateRestartPoint 函数

如上文所述,备机的 checkpointer 进程会定期触发 CreateRestartPoint 函数。该函数主要做了以下内容:

  1. 使用最近一次 checkpoint WAL 中的 redopoint 位点、chckpoint WAL 位点更新自身的对应位点;
  2. 使用 CheckPointGuts 进行刷脏,将内存中的信息持久化到硬盘;
  3. 更新 pg_controlfile 中的信息,并落盘;
  4. 进行 WAL 日志文件回收;
  5. 写 CSV 日志记录本次 restartpoint(如果设置了的话),更新进程的相关显示信息。

需要注意的是:restartpoint 不写 WAL

参考资料

[1] https://www.postgresql.org/docs/current/wal-configuration.html

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

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

相关文章

VR 全景模式OpenGL原理

VR 全景模式OpenGL原理 VR 全景模式原理 VR 全景模式原理将画面渲染到球面上,相当于从球心去观察内部球面,观察到的画面 360 度无死角,与普通播平面渲染的本质区别在渲染图像部分,画面渲染到一个矩形平面上,而全景需…

稀碎从零算法笔记Day4-LeetCode:交替合并字符串

前言:今天妹有深夜档,因为8点有个飞机 题型:字符串、双指针(笔者没用这个思路) 链接:1768. 交替合并字符串 - 力扣(LeetCode) 来源:LeetCode 著作权归作者所有。商业转…

Linux 文件系列:深入理解文件描述符fd,重定向,自定义shell当中重定向的模拟实现

Linux 文件系列:深入理解文件fd,重定向,自定义shell当中重定向的模拟实现 一.预备知识二.回顾C语言中常见的文件接口跟重定向建立联系1.fopen函数的介绍2.fclose函数的介绍3.代码演示1.以"w"(写)的方式打开2.跟输出重定向的联系3.以 "a"(追加)的方式打开4.…

Vue3 配置 vite.config.js 解决跨域问题

Vue3 配置 vite.config.js 解决跨域问题 问题再现 Access to XMLHttpRequest at ‘http://localhost:8080/user/register’ from origin ‘http://localhost:5173’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested…

JS数组,if等结构语序

目录 浏览器的断点调试: 流程控制: 顺序流程控制:流程代码会逐行向下进行。 分支流程控制: IF语句: Switch语句: Switch和if的区别: 三元表达式: 循环: for循环…

麻省理工最新开发AI模型,让机器人实现自主规划路线

文 | BFT机器人 麻省理工学院的研究人员独具匠心地应用了人工智能来解决仓库中的机器人路径规划问题,以此缓解交通拥堵的难题。据该学院介绍,他们的团队开发了一种深度学习模型,其效率比传统的强随机搜索方法高出近四倍,极大地提…

设计模式:策略模式 ⑥

一、策略模式思想 简介 策略模式(Strategy Pattern)属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。…

关于V5版本的echarts的引导线标签文字存在描边问题

1.如果存在描边:(如图所示,炒鸡难受好吧,也不知道官方为什么这样初始化) 2.只需在series的label中配置color:#FFF即可

Crossbar阵列的电路结构及其基本原理

忆阻器Crossbar阵列是一种先进的神经网络硬件实现技术,它利用忆阻器的物理特性来模拟神经网络中的突触连接,为人工智能和机器学习应用提供了一种高效、低能耗的计算平台。本文将深入探讨忆阻器Crossbar阵列的基本原理及其在Read(读取&#xf…

YOLOv9独家原创改进|加入幽灵卷积Ghost Convolution模块,轻量化!

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、论文摘要 由于内存和计算资源有限,在嵌入式设备上部署卷积神经网络是困难的。特征图中的冗余是那些成功的细胞神经网络的一个重要特征…

机器人顶刊IJRR近期国人新作(2024)

一、IJRR简介 The International Journal of Robotics Research(IJRR)是机器人领域的高水平学术期刊,专注于发布关于机器人技术和相关领域的最新研究成果。IJRR创刊于1982年,是该领域的第一本学术刊物,2022-2023最新影…

MP2494图纸 国产替代型号SC72001宽工作输入电压范围:4.5V 至 80V

MP2494 是一款单片降压开关变换器。它在宽输入范围内可实现 2A 连续输出电流,具有出色的负载和线性调整率。其控制良好的开关沿降低了 EMI 干扰。故障保护功能包括逐周期限流保护和过温关断保护。MP2494 最大限度地减少了现有标准外部元器件的使用。MP2494采用SOIC8…

力扣每日一题 用栈实现队列

Problem: 232. 用栈实现队列 文章目录 思路复杂度💖 朴素版💖 优化版 思路 👨‍🏫 路飞题解 复杂度 时间复杂度: 添加时间复杂度, 示例: O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例: O ( …

非常优秀的一个开源库Gradio,几行代码完成部署快速搭建AI算法可视化部署演示,直接启动零配置实现微信分享、公网分享、内网穿透,包含项目搭建和案例分享

非常优秀的一个开源库Gradio,几行代码完成部署快速搭建AI算法可视化部署演示,直接启动零配置实现微信分享、公网分享、内网穿透,包含项目搭建和案例分享。 Gradio是一个功能丰富的Python库,可以让您轻松创建和共享自己的交互式机器…

【JAVA】Tomcat集成到IDEA

目录 1.在IDEA中安装插件:Smart Tomcat。 2.配置smart tomcat 浏览器显示中文出现乱码 我们可以借助IDEA的插件,把tomcat集成IDEA中,然后我们就可以通过IDEA一键式的重新打包部署了。 1.在IDEA中安装插件:Smart Tomcat。 1&a…

测试环境搭建整套大数据系统-问题篇(一:实时遇到的问题)

1. java.io.IOException: Failed to deserialize JSON ‘{“age”:867,“sex”:“fba8c074f9”,“t_insert_time”:“2024-03-04 14:12:24.821”}’ 解决方式 修改数据类型。将TIMESTAMP_LTZ改为TIMESTAMP。 2. java. lang,classNotFoundException: org,apache.flink,streami…

5G智能制造热力工厂数字孪生可视化平台,推进热力行业数字化转型

5G智能制造热力工厂数字孪生可视化平台,推进热力行业数字化转型。在当今这个信息化、数字化的时代,热力生产行业也迎来了转型的关键时刻。为了提升生产效率、降低成本、提高产品质量,越来越多的热力生产企业开始探索数字化转型之路。而5G智能…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:组件标识)

id为组件的唯一标识,在整个应用内唯一。本模块提供组件标识相关接口,可以获取指定id组件的属性,也提供向指定id组件发送事件的功能。 说明: 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容…

【Sql Server】存储过程的创建和使用事务,常见运用场景,以及目前现状

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

【3GPP】【核心网】【5G】5G核心网协议解析(二)(超详细)

5G UE 附着过程 UE AMF ----------------- 注册请求(Registration Request) ----------------------> <--------------- 鉴权请求(Authentication Request) ------…