帮您理解PostgreSQL(WAL、XLOG、CheckPoint进程、LSN、PITR、SR)

2024-06-17 18:12

本文主要是介绍帮您理解PostgreSQL(WAL、XLOG、CheckPoint进程、LSN、PITR、SR),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、WAL、XLOG、LSN
  • 二、检查点进程与pg_control文件-负责脏页刷盘、数据库恢复
  • 三、基础备份与时间点恢复PITR
  • 四、原生复制功能与流复制(SR Streaming Replication)

一、WAL、XLOG、LSN

在计算机领域,WAL是Write Ahead Logging的缩写,指将变更、行为先写入事务日志的协议和规则。
在PostgreSQL中,WAL是Write Ahead Log的缩写,它就是事务日志。PostgreSQL将所有修改作为历史数据写入持久化存储中,这份数据被称为XLOG记录或WAL数据。
当插入、删除、提交等变更动作发生时,pg会将xlog记录写入内存的WAL缓冲区(几乎所有的DBMS都实现了共享缓冲区,为了高效访问),一般当事务提交或中止时,它们会被立即写入持久化存储的WAL段文件中,XLOG记录的日志序列化(Log Sequence Number,LSN)标识了该记录在事务日志中的位置,LSN被用作XLOG的唯一标识符
XLOG是一种重做日志

二、检查点进程与pg_control文件-负责脏页刷盘、数据库恢复

插入数据时(脏页刷盘)

  1. 检查点进程是一个后台程序,定期执行检查点(某些条件下,如间隔300s或wal段文件的数量或大小超过参数值),检查点进程启动时,它会向当前WAL日志写入一条XLOG记录,包含最新的重做点位置。
  2. 当发起第一条INSERT语句时,PostgreSQL从数据库集簇文件(磁盘上)中加载表A的页面到内存的共享缓冲池,向页面中插入一条元组,在LSN_1的位置创建并写入XLOG记录,再讲表LSN_0更新为LSN_1。
  3. 当该事务提交时,PostgreSQL向WAL缓冲区创建并写入一条关于该提交行为的XLOG记录,再将WAL缓冲区中的所有XLOG记录写入WAL段文件(磁盘上)
  4. 当发起第二条INSERT语句时,PG向页面中插入一条新元组,然后再LSN_2位置创建并写入一条XLOG记录,最后将表A的LSN从LSN_1更新到LSN2。
  5. 当第二条语句的事务提交时,重复步骤3.
  6. 即使操作系统故障,共享缓存区所有数据度丢失额,但是所有页面的修改已经写入WAL段文件(磁盘上)
    数据库恢复时
    重启pg数据库会自动进入恢复模式,pg会从重做点开始,依序读取正确的WAL段文件并重放XLOG记录。
    1.PG从WAL段文件读取第一条INSERT语句的XLOG记录,并从硬盘上的数据库集簇加载表A到内存中的共享缓存区。
    2.PG比较XLOG记录的LSN和相应页面的LSN
    a.如果XLOG记录的LSN比页面的LSN大,则重放XLOG记录的数据插入到页面中,并更新页面的LSN为XLOG的LSN。
    b.如果XLOG记录的LSN比页面的LSN小,则什么都不做,直接读取后续WAL数据
    3.PG按照以上方式重放其余XLOG记录
    pg_control:pg_control文件包含了检查点的基本信息,如果此文件被破坏或不可读,系统就会不知道从哪里恢复,恢复过程就无法启动

三、基础备份与时间点恢复PITR

WAL是基于时间点恢复(PITR:Point-in-Time Recovery)和流复制(SR:Streaming Replication)的基础
在这里插入图片描述基础备份:全量物理备份,整个数据库集簇的运行时快照备称作基础备份
持续归档与归档日志:持续归档是当WAL段文件发生切换时自动将其复制至归档区域的功能,复制的文件被称为归档日志。
PITR:可以将数据库恢复至任意时间点,基于基础备份和持续归档生成的归档日志实现。PITR模式下的pg数据库会在基础备份的基础上重放归档日志的wal数据,从pg_start_bakup创建的重做点开始,恢复到你想要的位置为止。

四、原生复制功能与流复制(SR Streaming Replication)

原生复制功能:主库不断发送WAL数据,备库接受WAL数据,并立即重放日志
流复制:流复制包含日志传输和数据库同步两个方面。pg9.0版本后可实现同步流复制
基于流复制协议通信协议实现,具体可查看:https://www.postgresql.org/docs/11/protocol-replication.html
流复制的启动
1、启动主库服务器、备库服务器
2、备库服务器启动一个启动进程
3、备库服务器启动一个WAL接收器进程
4、WAL接收器向主库接收器发送链接请求,如果主库尚未启动,那么WAL接收器会定期重发该请求
5、当主库服务器收到链接请求,启动WAL发送器进程,并建立WAL发送器和WAL接收器之间的TCP连接。
6、WAL接收器发送备库数据库集簇上最新的LSN,握手
7、如果备库最新的LSN小于主库最新的LSN,那么WAL发送器会将钱一个LSN到后一个LSN之间的WAL数据发送到WAL接收器,这些WAL数据存储在主库的pg_xlog子目录的WAL段提供,最终备库重放接受到的WAL数据,在这个阶段,备库在追赶主库,被称为追赶阶段。
同步流复制:事务等到备库日志同步成功后才成功commit
当备库出于同步复制模式,主库提交了一个简单的INSERT事务
1、主库进程通过执行函数XlogInsert()和XLogFlush(),将WAL数据写到WAL的段文件中,
2、主库WAL发送器进程将WAL数据发送到备库的WAL接收器进程
3、主库后端进程等待来自备库的ACK响应,准确说,后端进程通过执行内部函数SyncRepWaitForLSN()来获取锁存器,并等待它被释放。
4、备库上的WAL接收器通过write()系统调用,将接受到的WAL数据写入WAL段,并想WAL发送器返回ACK响应。
5、备库WAL接收器通知备库启动进程WAL数据已更新
6、备库启动进程重放已写入WAL段的WAL数据
7、主库WAL发送器在收到来自WAL接收器的ACK响应后,释放后端进程的锁存起,然后后端进程完成commit,。
在这里插入图片描述在这里插入图片描述

这篇关于帮您理解PostgreSQL(WAL、XLOG、CheckPoint进程、LSN、PITR、SR)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070177

相关文章

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux进程终止的N种方式详解

《Linux进程终止的N种方式详解》进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束,下面小编为大家整理了一些常见的Linux进程终止方式,大家可以根据需求选择... 目录前言一、进程终止的概念二、进程终止的场景三、进程终止的实现3.1 程序退出码3.2 运行完毕结果正常3.3 运行完毕

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统