第9章的摘要:“在“ postgresql的内部”书中写下提前记录(WAL)”
#postgres #database #apacheage #agenssql

此博客旨在帮助您理解章节的临界概念:9 [书面记录(WAL)]

注意:确保您对Chapter 8 Part-1Chapter 8 Part-2Chapter 8 Part-3和postresql的基础知识有透彻的了解,因为它构成了我们探索的基础。

所以,让我们开始:

章节简介

  • 事务日志是数据库的重要组成部分,因为即使发生系统故障,所有数据库管理系统都必须丢失任何数据。

  • 这是所有更改的历史日志和数据库系统中的操作,以确保由于失败而 of 功率故障或其他导致服务器崩溃的服务器故障

  • log 包含有关已经执行的每个事务的足够信息,数据库服务器应能够通过重播 recover 数据库群集在服务器崩溃的情况下,交易日志中的更改和操作。

  • 在Postgresql中, wal 的首字母缩写词。该术语用作交易日志的同义词,还用来指与交易日志(WAL)编写操作有关的实现机制。


章节概述

没有WAL

的插入操作
  • 为了提供有效访问关系页面的访问,每个DBMS都会实现共享缓冲池

  • 假设我们将一些数据元组插入 table_a 上的postgresql上,该数据不实现WAL功能。

插入操作没有WAL 在下面的图中描述:

Image description

  • (1)发出第一个插入语句,PostgreSQL将Table_a的页面从数据库群集加载到内存内共享的缓冲区池中,并将元组插入页面。

  • (2)发出第二个插入语句,PostgreSQL将一个新的元组插入缓冲池的页面中。此页面尚未写入存储中。

  • (3)如果操作系统或PostgreSQL Server出于任何原因(例如电源故障)失败,则所有插入的数据都将丢失。

没有 wal 的数据库很容易受到系统故障的影响。

插入操作和数据库恢复

  • PostgreSQL将所有修改作为历史数据写入持续存储,以准备失败。

  • 历史数据被称为 Xlog记录(S) wal data

  • XLOG记录通过更改操作(例如插入,删除或提交操作。。 li>

  • 当交易进行/流产时,它们立即将其写入存储的 Wal segment File

  • lsn(log序列号)XLOG记录的表示其记录写入交易日志的位置。

  • 记录的LSN用作Xlog记录的唯一ID

  • postgresql开始从重做点开始恢复;也就是说,在启动最新 Checkpoint 时,编写Xlog记录的位置。

  • 数据库恢复处理检查点处理 密切相关,这两个处理都是不可分割的。

在PostgreSQL中使用WAL 插入操作如下图:

Image description

  • (1)检查点过程,定期执行检查点。每当CheckPointer启动时,它都会将XLOG记录写入当前WAL段 Checkpoint Record 。此记录包含最新重做点的位置。

  • (2)发出第一个插入语句,PostgreSQL将表_A的页面加载到共享的缓冲池中,将元组插入页面中,创建并写入此语句的XLOG记录,将此语句记录到WAL BUFFER中,位于LSN_1的位置,并将表_a的LSN从lsn_0更新为lsn_1。

  • 在此示例中

  • (3)当此交易所做的事件时,PostgreSQL创建并将此提交动作的XLOG记录写入Wal Buffer中,然后,将WAL BUFFER上的所有Xlog记录写入WAL段中的所有Xlog记录,从LSN_1。

  • (4)发出第二个插入语句,PostgreSQL将一个新的元组插入页面,创建并将此元组的XLOG记录写入LSN_2的WAL Buffer,并将Table_a的LSN从LSN_1更新为LSN_1。 p>

  • (5)当此语句的交易进行时,PostgreSQL以与步骤(3)相同的方式运行。

  • (6)想象一下何时应发生操作系统故障。即使丢失了共享缓冲池上的所有数据,该页面的所有修改已将其写入WAL段文件中。

  • PostgreSQL将通过重新启动自动输入恢复模式。 postgresql依次将读取和重播 xlog 记录在适当的 wal segment files 中。

使用WAL 在PostgreSQL中的数据库恢复如下图:

Image description

  • (1)PostgreSQL从适当的WAL段文件中读取第一个插入语句的XLOG记录,将数据库群集中的Table_a页面加载到共享的缓冲池中。

  • (2)在尝试重播XLOG记录之前,PostgreSQL应将XLOG记录的LSN与相应的页面的LSN进行比较。

  • 重播XLOG记录的规则如下:

  1. 如果XLOG记录的LSN比页面的LSN更大,则XLOG记录的数据输入将插入页面中,并且页面的LSN已更新到XLOG记录LSN。

  2. 如果Xlog记录的LSN是较小,除了阅读下一个WAL数据外,别无其他。

  • 对于示例,XLOG记录被重播,因为XLOG记录的LSN(LSN_1)大于Table_a的LSN(LSN_0);然后,Table_a的LSN从LSN_0更新为LSN_1。

  • (3)PostgreSQL以相同的方式重播其余的XLOG记录。

postgresql不支持 dusto log。


我希望,这个博客帮助您理解了postresql中的提前记录(WAL)的最初概念。

查看Chapter : 9 Part-2

的摘要

如果您想了解PostgreSQL In-Depth