帮您理解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

相关文章

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

PostgreSQL数据库密码被遗忘时的操作步骤

《PostgreSQL数据库密码被遗忘时的操作步骤》密码遗忘是常见的用户问题,因此提供一种安全的遗忘密码找回机制是十分必要的,:本文主要介绍PostgreSQL数据库密码被遗忘时的操作步骤的相关资... 目录前言一、背景知识二、Windows环境下的解决步骤1. 找到PostgreSQL安装目录2. 修改p

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务