第9章的摘要:“写入前伐木(WAL)”书中的“ postgresql的内部”第2部分
#postgres #database #apacheage #agenssql

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

注意:确保您对
有透彻的了解 在进入第9章第2章之前,Chapter 9 Part-1和Posttresql的基础是我们探索的基础。

所以,让我们继续:

全页写入

  • 假设table_a在存储中的页面数据已损坏,因为操作系统在背景撰写过程中一直在编写肮脏页面时失败。由于无法在损坏的页面上重播XLOG记录,因此我们需要一个全页写入来处理此类失败的其他功能。

  • 在PostgreSQL中,包含整个页面的这样的XLOG记录称为备份块全页图像

全页写入 postgresql中的图:

Image description

  • (1)CheckPointer开始检查点过程。

  • (2)在第一个插入语句的插入中,尽管PostgreSQL的运行方式几乎与以前的小节相同,但此XLOG记录是此页面的备份块(即它包含页面完整包含页面),因为这是最新检查点之后的此页面的第一篇文章。

  • (3)由于此交易所做的,PostgreSQL的运作方式与以前的小节相同。

  • (4)在插入第二个插入语句的插入中,PostgreSQL以与上一小节相同的方式运行,因为此XLOG记录不是备份块。

  • (5)当此语句的交易进行时,PostgreSQL以与上一小节相同的方式运行。

  • (6)要演示全页写入的有效性,在这里,我们考虑了由于操作系统故障发生在背景 - 作者一直在编写时,该案例已损坏了存储的表_a页面。它进入HDD。

数据库恢复带有备份块的数据库 postgresql中的如下图:

Image description

  • (1)PostgreSQL读取第一个插入语句的XLOG记录,并将损坏的Table_a的页面从数据库群集加载到共享的缓冲池中。在此示例中,Xlog记录是备份块,因为根据全页写入规则,每个页面的第一个XLOG记录始终是其备份块。

  • (2)当Xlog记录是其备份块时,应用了另一个重播的规则:记录的数据输入(即页面本身)将被覆盖到页面上,无论两个LSN的值如何,并且页面的LSN更新为XLOG记录的LSN。

  • 对于示例,PostgreSQL将记录的数据输入到损坏的页面上,并将表_a的LSN更新为LSN_1。通过这种方式,损坏的页面由其备份块恢复。

  • (3)由于第二个Xlog记录是一个非背包块,因此PostgreSQL的运作方式与以前小节中的指令相同。

  • 以这种方式,即使某些数据写入错误是由于过程或操作系统下降而发生的,PostgreSQL也可以恢复数据库。


交易日志和WAL细分文件

  • 从逻辑上讲,PostgreSQL将XLOG记录写入交易日志中,该记录是虚拟文件 8字节 long( 16 exabyte)。

  • 有效的交易日志容量无限,因此可以说 8字节地址空间足够广泛,我们不可能处理一个档案的容量为8字节长度。因此,默认情况下,将PostgreSQL中的事务日志分为 16-MBYTE 的文件,每个文件称为 wal saggment

交易日志和Wal segment Files PostgreSQL中的图表如下图:

Image description

  • 使用内置函数 pg_xlogfile_name (版本9.6或更早)或 pg_walfile_name (versoin 10或更高版本),我们可以找到Wal sement segment File File File File Name其中包含指定的LSN。

  • 示例

testdb=# SELECT pg_xlogfile_name('1/00002D3E');  # In version 10 or later, "SELECT pg_walfile_name('1/00002D3E');"
     pg_xlogfile_name     
--------------------------
 000000010000000100000000
(1 row)

内部布局

  • 默认情况下,WAL段为 16 MB 文件,并将其内部分为 8192字节(8 kb)的页面。第一页具有由结构 xloglongpageheaderdata 定义的标头数据,而所有其他页面的标题的页面信息由结构 xlogpageheaderdata 定义。

  • 页面标题后,Xlog记录从下降 order中的每个页面写入每个页面。

Wal段文件的内部布局 postgresql中的图表如下图:

Image description


我希望,这个博客帮助您理解了postresql中的前进伐木(WAL)的内侧概念。

查看Chapter : 9 Part-3的摘要

如果您想了解PostgreSQL In-Depth