在数据库管理中空间分配和回收是确保数据高效存储的关键操作。GBase 8s数据库系统通过其独特的Chunk Free List机制,精确地追踪每个chunk中的可用空间。下面我们就来了解这一机制的工作原理和重要性。
chunk free-list 概述
每个chunk都需要一种机制来跟踪其自身的可用空间。在每个chunk中的最后一个保留页面之后是chunk free list page。根据chunk中的碎片,该页面可以是多个页面中的一个,它包含指向未使用数据块的结构。每个结构或自由列表条目都包含两个元素:未声明范围的起始页和以页为单位测量的自由范围的长度。
chunk free list的布局如下图:
影响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的一项是两个数据构成的:
- 空闲区域在chunk的偏移位置(单位是page)。
- 空闲区域由多少个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,提升数据库管理技能。