GBase 8s
其他
文章

南大通用 GBase 8s 数据库中的物理日志与逻辑日志

路路路
发表于2025-01-17 16:35:38291次浏览0个评论

在数据库管理中,日志系统是确保数据完整性和系统恢复的关键组件。GBase8s数据库的物理日志和逻辑日志在系统恢复和数据管理中扮演着至关重要的角色。本文将探讨这两种日志的结构、功能以及它们在数据库管理中的重要性。

物理日志:快速恢复的基石

记录了数据库的所有物理操作,如数据页的修改、插入和删除等。这些记录在系统发生故障时,可以用来恢复数据库到故障发生前的状态。

物理日志的重要事实:

  1. 在快速恢复期间使用物理日志。
  2. 在大多数客户系统中,物理日志设置得太小,导致检查点出现得太频繁。
  3. 它可以移动到root dbspace之外,通常应该是这样。

虽然物理日志在一年中每天都完美运行的系统中可能没有多大用处,但它对GBase8s的快速恢复机制及其归档算法至关重要,这两者在我们大多数人所处的电源故障和磁盘崩溃的世界中都非常方便。

物理日志的初始大小通常太小,这可能会导致检查点过于频繁地出现。将物理日志的大小定得太小是新手管理员的常见错误。

物理日志的页结构

物理日志的页面结构与普通数据页类似,但有一些关键区别。物理日志中的页面包含原始页面位置的地址,而不是物理日志中的物理位置。这意味着,物理日志页面记录了数据页的原始位置,以便在恢复时能够准确地还原数据。

上图显示了物理日志页面的结构。物理日志中的页面与其原始页面相同。判断页面来自物理日志的唯一方法是查看页面地址(偏移量和区块)。页面包含原始页面位置的地址,而不是物理日志中的物理位置。

逻辑日志:数据一致性的保障

将逻辑日志视为一串日志页,每个日志页都有一个相当于逻辑页码的页偏移量。

每个逻辑日志都是一串连续的日志页。单个日志中的每一页都有编号,从0开始。

请记住,日志文件是块中的一个区段,它不会移动到任何地方,并且会不断被覆盖。日志文件是唯一的逻辑日志的临时宿主。备份到磁带的是逻辑日志,而不是日志文件。

逻辑日志可以包含从1到日志文件中可用总数的任意数量的页面。

逻辑日志页在逻辑日志缓冲区中一个接一个地生成,并在每次刷新缓冲区时按顺序写出。

逻辑日志页结构

如上图所示,逻辑日志页的结构可能表明通常访问日志记录的顺序方法。例如,请注意,该页面没有插槽表。(每条记录的长度存储在记录本身中。)另请注意,逻辑日志数据非常流畅,从一页溢出到下一页时不会大张旗鼓(尽管记录必须完全包含在日志文件中)。甚至页眉也有一些惊喜。

页头的一些属性与其他页也不同,具体如下:

  • pg_nslots

这是未使用的,因为日志页上没有插槽的真正概念。

  • pg_frcnt

这始终为零,即使对于未满的页面也是如此(请注意,pg_frptr是准确的)。原因更多的是巧合,而不是设计。

允许日志缓冲区中的日志页填充到最后一个字节,通常在下一页上继续最后一条记录。因此,大量日志页确实已满,特别是在专用缓冲日志记录时。

然而,例如,由具有无缓冲日志记录的数据库的检查点或提交记录强制进行的早期缓冲区刷新往往发生在缓冲区中的最后一页仅部分满的时候。一旦刷新到日志文件,日志页面就无法更改;无法向其中添加其他记录。即使这些页面的pg_frcnt也为0的原因是:就在刷新日志缓冲区之前,刷新进程将缓冲区中最后一页的pg_flcnt值设置为0,使页面看起来人为满,以防止在执行I/O时另一个引擎进程写入页面。

  • pg_next

在逻辑日志页上,页眉的此元素包含逻辑日志的唯一ID。

  • pg_prev

在逻辑日志页上,页眉的此元素包含日志页的页面偏移量(类似于逻辑页码)。请注意,这是日志中的偏移量,与往常一样,页面偏移量以0开头。

逻辑日志位置

日志记录仅在特定逻辑日志中唯一寻址。使用的地址称为逻辑日志位置,简称logpos。它是一个4字节的整数代码,根据页面偏移量和字节偏移量描述日志记录的位置。页面偏移量相对于日志的开头,从0开始索引。字节偏移量相对于页的开头,也从0开始索引,但由于页头占用的空间,此值不应小于0x018。

假设您被告知逻辑日志记录位于唯一ID为234、logpos为0x12018的逻辑日志中。你会怎么找到它?使用root chunk中两个检查点/逻辑日志保留页面中的较新页面,您可以找到日志号234的物理地址。一旦到达该页面,您将在日志中偏移0x12个页面以找到正确的日志页面,然后在该页面中偏移0x018个字节以找到日志记录。

展示逻辑日志

展示所有的逻辑日志文件

使用onstat –l 展示所有逻辑日志文件。

逻辑日志文件有两个号码:

  1. 文件编号(number),这个号码一直不变;

  2. 唯一编号(uniqid),逻辑日志文件都是循环使用的,因此,需要一个递增的唯一编号。

[root@node2 ids]# onstat -l
On-Line -- Up 16 days 03:16:37 -- 19345028 Kbytes

Physical Logging
Buffer bufused  bufsize  numpages    numwrits   pages/io
 P-2   98       256      13934      66          211.12
     phybegin         physize    phypos      phyused    %used
     2:53             32715      25656      4971       15.19

Logical Logging
Buffer bufused  bufsize  numrecs     numpages   numwrits   recs/pages pages/io
 L-3   0        128      1408526     154832     116507     9.1        1.3
       Subsystem    numrecs     Log Space used
       OLDRSAM      1408450    141317188
       HA           6          264
       DDL          70         24360

address          number   flags     uniqid   begin                size     used     %used
45b79a60         14       U-B----  121       3:29483              3270     3270    100.00
45b79ac8         13       U-B---L  122       3:26213              3270     3270    100.00
45b79b30         12       U-B----  123       3:22943              3270     3270    100.00
45b79b98         11       U-B----  124       3:19673              3270     3270    100.00
45b79c00         10       U-B----  125       3:16403              3270     3270    100.00
45b79c68         9        U-B----  126       3:13133              3270     3270    100.00
45b79cd0         8        U-B----  127       3:9863               3270     3270    100.00
45b79d38         7        U-B----  128       3:6593               3270     3270    100.00
45b79da0         6        U-B----  129       3:3323               3270     3270    100.00
45b79e08         5        U-B----  130       3:53                 3270     3270    100.00
45b79e70         1        U-B----  131       3:32753              3270     3270    100.00
45b79ed8         2         U-B----  132      3:36023              3270     3270    100.00
45b79f40         3        U-B----  133       3:39293              3270     3270    100.00
45b79fa8         4        U-B----  134       3:42563              3270     3270    100.00
4538df30         15       U-B----  135       3:45833              3270     3270    100.00
4538df98         16       U-B----  136       3:49103              3270     3270    100.00
4545ce28         17       U---C--  137       3:52373              3270     2411     73.73
485196a0         18       U-B----  120       3:55643              3270     3270    100.00
48acbed8         19       A------  0         3:58913              3270        0      0.00
19 active, 19 total

展示逻辑日志内容

使用onlog 可以展示逻辑日志的内容。具体使用方法,这里不展开。

通过探讨GBase8s数据库中的物理日志和逻辑日志,我们不仅了解了它们的结构和功能,还明白了它们在数据库管理和恢复中的重要性。希望本文能够为大家提供有价值的参考和启发,帮助大家更好地管理和维护GBase8s数据库系统。

评论

登录后才可以发表评论
加载中...