此博客旨在帮助您理解章节的临界概念:9 [书面记录(WAL)]
注意:确保您对Chapter 8 Part-1,Chapter 8 Part-2,Chapter 8 Part-3和postresql的基础知识有透彻的了解,因为它构成了我们探索的基础。 em>
所以,让我们开始:
章节简介
-
事务日志是数据库的重要组成部分,因为即使发生系统故障,所有数据库管理系统都必须丢失任何数据。
-
这是所有更改的历史日志和数据库系统中的操作,以确保由于失败而 of 功率故障或其他导致服务器崩溃的服务器故障。
-
log 包含有关已经执行的每个事务的足够信息,数据库服务器应能够通过重播来 recover 数据库群集在服务器崩溃的情况下,交易日志中的更改和操作。
-
在Postgresql中, wal 是 的首字母缩写词。该术语用作交易日志的同义词,还用来指与交易日志(WAL)编写操作有关的实现机制。
章节概述
没有WAL
的插入操作-
为了提供有效访问关系页面的访问,每个DBMS都会实现共享缓冲池。
-
假设我们将一些数据元组插入 table_a 上的postgresql上,该数据不实现WAL功能。
插入操作没有WAL 在下面的图中描述:
-
(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 插入操作如下图:
-
(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中的数据库恢复如下图:
-
(1)PostgreSQL从适当的WAL段文件中读取第一个插入语句的XLOG记录,将数据库群集中的Table_a页面加载到共享的缓冲池中。
-
(2)在尝试重播XLOG记录之前,PostgreSQL应将XLOG记录的LSN与相应的页面的LSN进行比较。
-
重播XLOG记录的规则如下:
-
如果XLOG记录的LSN比页面的LSN更大,则XLOG记录的数据输入将插入页面中,并且页面的LSN已更新到XLOG记录LSN。
-
如果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)的最初概念。
的摘要如果您想了解PostgreSQL In-Depth。