在数据库管理中空间分配和回收是确保数据高效存储的关键操作。GBase 8s数据库系统通过其独特的Chunk Free List机制,精确地追踪每个chunk中的可用空间。下面我们就来了解这一机制的工作原理和重要性。

chunk free-list 概述

每个chunk都需要一种机制来跟踪其自身的可用空间。在每个chunk中的最后一个保留页面之后是chunk free list page。根据chunk中的碎片,该页面可以是多个页面中的一个,它包含指向未使用数据块的结构。每个结构或自由列表条目都包含两个元素:未声明范围的起始页和以页为单位测量的自由范围的长度。

chunk free list的布局如下图:

探索南大通用 GBase 8s数据库的Chunk Free List机制_sed

影响chunk free list的操作

1、分配空间

当在chunk中分配extent 时,可用空间的损失表现为从chunk free list中删除条目,或者修改条目中的一个或两个元素。

2、释放空间

当表被删除时,或者在某些情况下当表被更改时,ids 会释放空间。当回收可用空间时,可以将新条目添加到区块空闲列表中。如果新释放的空间与现有的空闲空间相邻,则仅改变相关联的空闲列表条目中的长度元素;否则,将创建一个新条目。

附加的chunk free list page

如果一个chunk 变得如此碎片化,以至于初始的chunk 空闲列表页面充满了条目,则会分配一个额外的chunk free list page。然后,这些页面以链接列表的形式链接在一起。这个链中的每个链接只负责其自身和下一个chunk空闲列表页之间的扩展。这种设计需要在各个环节之间进行良好的协调。

实际操作:找到Chunk Free List Page

1、找到chunk free list page

使用oncheck –pe,可以找到chunk free list page所在的位置:

DBspace Usage Report: rootdbs             Owner: gbasedbt  Created: 07/18/2024


Chunk Pathname                             Pagesize(k)  Size(p)   Used(p)  Free(p)
1 /gbase8s/3.3.0_2X4_1/ids/storage/rootdbs            2    78848     24758    54090

Description                                                    Offset(p)  Size(p)
------------------------------------------------------------- -------- --------
RESERVED PAGES                                                        0       12
CHUNK FREELIST PAGE                                                 12        1
略

DBspace Usage Report: plog                Owner: gbasedbt  Created: 07/18/2024


Chunk Pathname                             Pagesize(k)  Size(p)   Used(p)  Free(p)
2 /gbase8s/3.3.0_2X4_1/ids/storage/ol_gbasedbt1210_20240718181816_plog_p_1            2    32768     32768        0

Description                                                    Offset(p)  Size(p)
------------------------------------------------------------- -------- --------
RESERVED PAGES                                                        0        2
CHUNK FREELIST PAGE                                                   2        1
略

DBspace Usage Report: datadbs1            Owner: gbasedbt  Created: 07/18/2024


Chunk Pathname                             Pagesize(k)  Size(p)   Used(p)  Free(p)
4 /gbase8s/3.3.0_2X4_1/ids/storage/ol_gbasedbt1210_20240718181816_datadbs1_p_1            2    32768       269    32499

Description                                                    Offset(p)  Size(p)
------------------------------------------------------------- -------- --------
RESERVED PAGES                                                        0        2
CHUNK FREELIST PAGE                                                  2        1

 

2、查看页内容

通过oncheck -pP命令,我们可以查看特定chunk的Chunk Free List Page内容,了解空闲区域的偏移位置和长度。

[root@node2 ids]#  oncheck -pP 1 12
addr             stamp    chksum nslots flag type         frptr frcnt next     prev
1:12             3976329  acb8    8      808  CHUNK         32    2008  0         0
  start    length
    263        2
   6421        4
   9561        4
  14001        24
  14401     13046
  29663        1
  30248        2
  37841     41007

chunk free list的一项是两个数据构成的:

  1. 空闲区域在chunk的偏移位置(单位是page)。
  2. 空闲区域由多少个page组成。

查看datadbs1的chunk free list page。

[root@node2 ids]#  oncheck -pP 4 2
addr          stamp    chksum nslots flag type         frptr frcnt next     prev
4:2           380982   d035    1      808  CHUNK         32    2008  0         0
  start    length
  269      32499

通过对GBase 8s数据库Chunk Free List机制的深入了解,我们可以看到它是如何精确地管理数据库空间的。这一机制不仅提高了空间利用率,还优化了数据库的性能。作为数据库管理员,掌握这一机制对于维护数据库的稳定性和效率至关重要。希望这篇文章能够帮助您更好地理解GBase 8s的Chunk Free List,提升数据库管理技能。