gbase8s数据库寻址过程分析

数据页大小 16k

1 创建数据库、表

create database test in datadbs1 with log;

create table t1 (c1 int,c2 varchar(10));

insert into t1 values(1,'aaa');

insert into t1 values(2,'bbb');

select * from t1 where c1 =1;

当发起查询请求时,数据库是如何定位数据在存储上的物理位置呢

大概流程如下

1 获取 datadbs1表空间物理位置

slot5 中记录了逻辑位置与物理位置

整理如下

逻辑位置   物理位置
0             6:24 
50           6:2120
100         6:5752
200         6:11448
400         6:2303864

2 获取t1表的partnum

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

其中0x6标识表空间chunk编号 0x1f6表示逻辑偏移

转换成10 进制为502

t1表实际物理位置为 (502-400)* pagesize /2 +2303864=2304680

oncheck -pP 6 2304680

其中 slot5记录了 t1表的extent 信息,数据也存储在extent 中

前四字节为逻辑偏移 ,之后两字节为表空间编号 ,然后再四字节为物理位置

上图描述为t1表目前只有一个 extent 逻辑上从0 开始 表空间chunk编号为 6 对应实际物理位置为 0x268d80 转换为10 进制为  2526592

oncheck -pP 6 2526592

FREE 为 bitmap 页,下一页即为数据实际存储位置

gbase8s使用rowid /ifx_row_id 来标识数据存储

257,258 转换为16进制为0x101 ,0x102

rowid是一个4字节编码,前3个字节是逻辑页号,第4个字节是slot号,rowid为257,转16进制为0x101,那么逻辑页号就是0x000001,slot号就是0x01,rowid为258,转16进制为0x102,那么逻辑页号就是0x000001,slot号就是0x02,所以rowid为0x101,0x102对应的物理页号就是 2526592 + 8=2526600

导出对应的page 

dd if=/home/gbasedbt/install_dir/350_3x2_4/gbase350_3x2_4_dbs/datadbs1_1 of=a.page skip=315825 count=1 bs=16k

od -x a.page

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值