PostgreSQL-WAL日志介绍(一)

news/2025/1/19 6:18:28/

1. 概述

1.1 WAL日志

WAL日志:即预写式日志(Write-Ahead Logging),是保证数据完整性、实现事务日志的一种标准方法。WAL的中心思想是数据文件的修改必须在这些动作被日志记录后才被写入,即先写日志,再写数据。

数据库采用WAL日志的方式实现故障恢复,它将SQL对数据的修改抽象成一系列WAL日志记录(Record),多个Record组成一个流式的日志序列。在数据库出现故障时,可以通过逐条重做(REDO)WAL日志记录,恢复尚未落盘的数据,从而保证数据的持久性。

1.2 日志文件 

事务日志的文件名中隐含着日志的信息,每个文件名的长度都是24个字符,每个字符以16进制表示。其中前八个字符表示时间线;中间八个字符表示逻辑ID,每个逻辑id默认大小为256*16MB,每个逻辑id被划分为多个日志段(即日志文件));后八个字符表示段号,每个日志段默认大小为16MB(可以通过wal_segment_size指定),因此在末尾的8个字符中,只有最后两个字符有用(即用256以内整数的十六进制表示),这两个字符表示当前文件是第几个日志段),每个段是一个独立的日志文件。

逻辑ID、段号以及段内的偏移量构成日志序列号LSN,形如“0/24E9AB68”的字符串,其中0表示逻辑ID,24表示段ID,E9AB68表示这个LSN在段内的偏移量,如果此时时间线为1,那么这个LSN对应的日志文件时000000010000000000000024,它在文件中的偏移量是15313768。

使用pg_waldump可以查看日志文件。日志被划分为多个类型的资源管理器(Rmgr),每个资源管理器只需要负责与自己相关的日志处理,这样就可以将庞杂的日志类型更加清晰地表达出来。

【注】PostgreSQL数据库中的事务日志只有Redo日志,没有Undo日志。

​​​​​​​1.3 日志页面 

日志由固定大小的多个段组成,每个段是一个独立的日志文件。每个日志文件都在内部划分为多个日志页面。默认情况下,每个日志页面大小为8KB。日志页面由页面头(Header)和连续的日志记录(Record)组成,日志记录是事务日志的最小单元。

Header分为两种类型:1、第一个页面的Header中包含段的长度、段页面的大小等信息,通常使用XLogLongPageHeaderData来标识。2、其他页面使用“short”表示页面的Header信息,对应的结构体是XLogPageHeaderData,包含当前事务日志对应的版本、时间线等信息。(XLogLongPageHeaderData和XLogPageHeaderData是包含关系)

日志记录的数据主要分为两部分:一部分是与页面有关的信息,这部分不保存实际数据,只保存与页面相关的header信息;实际数据在第二部分,紧随着XLogRecordDataHeader存储。每个页面中都有多条日志记录。为了节省空间以及处理一些特殊情况,如果页面的剩余空间大于日志记录的头部(及大于XlogRecord结构体的大小),同时又不足以放下一条完整的日志记录,那么这条日志记录可以跨页面保存;否则这部分剩余空间无法被使用。此外,日志记录之间隐含着连接关系,通过xl_prev能够定位到上一条日志记录的起始位置。由于日志记录是顺序存储的,所以通过xl_tot_len能够定位到下一条日志记录的起始位置,因此日志记录之间形成了一个“双向链表”。


http://www.ppmy.cn/news/1564328.html

相关文章

反转字符串中的单词 II:Swift 实现与详解

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

React实现拖拽特效

前言 最近,我看到一个工程师的个人网站上,采用了拖拽作品集的互动特效,既有趣又吸引眼球。经过一些研究,我发现其实借助一些现成的套件,就能轻松实现这样的效果。今天就带大家一起看看,如何通过 Framer Mo…

提示词的艺术----AI Prompt撰写指南(个人用)

提示词的艺术 写在前面 制定提示词就像是和朋友聊天一样,要求我们能够清楚地表达问题。通过这个过程,一方面要不断练习提高自己地表达能力,另一方面还要锻炼自己使用更准确精炼的语言提出问题的能力。 什么样的提示词有用? 有…

阻塞赋值和非阻塞赋值

理论学习 阻塞赋值 用 表示 ,这种对应的电路结构常常与触发器没有关系,只与输入电平的变化有关系。可以将阻塞赋值的操作看作只有一个步骤的操作,即将计算赋值符号的右边赋值给左边,在未执行完之前&#…

设计模式(4)行为模式

行为模式 1. Chain of Responsibility Pattern(责任链模式)2.Command Pattern(命令模式)3.Interpreter Pattern(解释器模式)▲4.Iterator(迭代器模式)5.Mediator(中介者模…

机器学习-基本术语

文章目录 1. **数据集(Dataset)**2. **样本(Sample)**3. **属性(Attribute)**4. **特征(Feature)**5. **属性值(Attribute Value)**6. **属性空间&#xff08…

【机器学习:二十一、避免高偏差和高方差】

定性分析:训练误差与验证误差的关系 在构建机器学习模型时,高偏差和高方差是两种常见的问题。高偏差通常意味着模型过于简单,未能很好地捕捉数据的复杂特性,导致训练误差和验证误差都较高。高方差则表示模型过度拟合,…

【2024年华为OD机试】(B卷,100分)- 数据分类 (Java JS PythonC/C++)

一、问题描述 题目描述 对一个数据a进行分类,分类方法为: 此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的结果小于一个给定的值c,则数据a为有效类型,其类型为取模的值&…