欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > gbase8s存储学习一 rootdbs存储结构以及寻址分析

gbase8s存储学习一 rootdbs存储结构以及寻址分析

2025/4/24 10:54:01 来源:https://blog.csdn.net/wangyx01/article/details/147465540  浏览:    关键词:gbase8s存储学习一 rootdbs存储结构以及寻址分析

主要层次自下而上为

最小物理存储单元page ,多个page 组成逻辑存储单元extent,多个extent 组成物理存储单元chunk ,而多个chunk组成逻辑存储单元dbspace,多个dbspace 组成一个数据库实例

在数据库初始化阶段会生成一个rootdbs表空间,该表空间为逻辑存储,通常对应一个实际chunk文件,一般命名为rootdbs或者 rootchk

该表空间为数据库的根空间,主要存储数据库的一些系统元数据(系统表),以及数据库的保留页

保留页结构如下

0 数据库描述信息

1 数据库配置参数

2、3 检查点信息

4、5表空间信息

6、7chunk信息

8、9镜像(一般很少见)

a、b归档信息

oncheck -pr 可以dump存储信息

数据库描述信息

配置参数

检查点信息

表空间信息

chunk信息

镜像信息,默认不配置

归档信息

保留页之后的信息为数据库的元数据信息

使用oncheck -pe rootdbs 可以格式化列出rootdbs的扩展信息

从0 page开始前12 个页为保留页

第13 个页为chunk-freelist-page

该页的作用为

每个chunk 都需要一种机制来跟踪其自身的可用空间。在每个数据块的最后一个已分配(预留)页之后,是一个数据块空闲链表页(chunk free-list page)。该空闲链表页的数量可能因数据块内部的碎片化程度而有所不同(可能存在多个这样的页),它包含指向未使用区段(extents)的结构体。每个结构体(即空闲链表条目)包含两个元素:一个未分配区段的起始页,以及该空闲区段的长度(以页为单位)。

之后为表空间的TBLspace, 初始250个页面,后会自动扩展

系统中的每个表空间都有一个特殊页来描述,这种特殊类型的页称作分区页(TBLspace )。

结构如下

oncheck -pP 1 14

信息如下

slot1 的前四个字节(0x00100001) 可以理解为 表空间的 Partition Number (Partnum),整体为Partition 结构体

slot5为extent 信息,如下

0: 0 0 0 0 0 1 0 0 0 d 0 0 0 fa 0 1

16: 0 0 e4 ba 0 0 1 2c 0 1 0 0 e6 b9 0 0

32: 1 90 0 1 0 1 0 55 0 0 2 58 0 0 0 0

48: 0 0

前四个字节为该页逻辑起始位置 两字节为chunk编号,再四字节为 物理位置,循环可得出一个extent信息,转10进制如下

与oncheck -pe rootdbs| grep TBLSpace 输出一致,初始250个页面,后边的为自动扩展的

如何理解上述信息

该TBLspace 分为四个extent

第一个extent 从 13 page 开始,共250个page

第二个extent 从 58554 page 开始,共50个page

....

再之后就是每个系统表,索引以及自定义表索引等位置信息

如何使用该信息

例如 查询sysmaster库下的systables表,该如何定位该表的存储位置

select hex(partnum) from sysmaster:systables where tabname='systables';

结果为 0x00100004

partnum 分为两部分 ,一部分为0x001 一部分为 4

前部分指chunk编号后部分为逻辑偏移

逻辑偏移为4 时,相当于物理偏移为 13+4=17

刚好为我们要查找的sysmaster库下的systables TBLspace信息

如何 定位systables的数据,例如查询systables 表下 tabname列为syssynonyms 行数据

select rowid,ifx_row_id,tabname from systables where tabname='syssynonyms';

rowid 777

ifx_row_id 1048580:777

tabname syssynonyms

rowid是一个4字节编码,前3个字节是逻辑页号,第4个字节是slot号

ifx_row_id分为两部分 前一部分systables partnum 后边与rowid一样

1048580 转16进制 刚好为0x100004 与select hex(partnum) from sysmaster:systables where tabname='systables'; 查到的一致

777 转16进制为 0x309 逻辑页号为 3  9 为 slot

这时需要观察systables 表的TBLspace信息

按照之前的分析如下

0: 0 0 0 0 0 1 0 0 d7 f3 0 0 0 8 0 1

16: 0 0 da 8b 0 0 0 10 0 1 0 0 e1 20 0 0

32: 0 20 0 1 0 0 e6 45 0 0 0 40 0 0 0 0

48: 0 0

与 oncheck -pt sysmaster:systables 输出一致

逻辑页号为 3 9 为 slot

对应 物理位置为 55286 slot9 数据

oncheck -pP 1 55286

查看该页找到 slot9

刚好是查询的 tabname='syssynonyms'

其寻址大概逻辑为

先找到表空间的TBLspace 根据extent 以及 table 的partnum 信息找到 表的TBLspace,再根据rowid/ifx_fow_id定为到数据所在page 以及slot

不同page 大小对于寻址的计算稍有差异

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词