当前位置: 首页 > news >正文

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 大小对于寻址的计算稍有差异

相关文章:

  • 【Java面试笔记:基础】10.如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?
  • Android 中解决 RecyclerView 和子控件之间的滑动冲突问题
  • 文档构建:Sphinx全面使用指南 — 进阶篇
  • Android TV 输入框架(TIF)深度解析与实践指南
  • 【Java学习日记25】:带返回值的方法
  • 【6D位姿估计】Foundation Pose复现
  • 【LangChain4j】AI 第二弹:项目中接入 LangChain4j
  • 从入门到精通:CMakeLists.txt 完全指南
  • 【MQ篇】RabbitMQ之工作队列模式!
  • 【无标题】spark安装部署
  • 16.第二阶段x64游戏实战-分析二叉树结构
  • CAMAT
  • FreeRTOS深度解析:队列集(Queue Sets)的原理与应用
  • 域名 → IP 的解析全过程
  • 【PCB工艺】推挽电路及交越失真
  • 厚铜PCB制造中的散热结构工艺控制要点
  • 探秘Transformer系列之(30)--- 投机解码
  • JavaScript 改变this指向
  • LeetCode第164题_最大间距
  • 图文结合 - 光伏系统产品设计PRD文档 -(慧哥)慧知开源充电桩平台
  • 北京顺义潮白河大桥主跨坍塌原因公布,已成立事故调查组
  • 城事|喊侬白相,长兴太湖9号公路邀上海市民共赴诗意之旅
  • 秦洪看盘|热点凌乱难抑多头雄心
  • 秦洪看盘|新热点涌现,A股活力渐显
  • 十大券商看后市|A股下行波动风险有限,震荡中有望逐步抬升
  • 新科世界冠军!雨果4比1战胜林诗栋,首夺世界杯男单冠军