数据库页面结构——Informix篇(2

数据库页面结构——Informix篇(2

比起Oracle的页面结构,Informix的页面结构就非常简单,但我觉得简单是一种美,这也有点浓缩是精华的味道。

为了更容易看存储结构,新创建一个小的databasespace,用于保存新创建的表。创建操作如下所示:

因为Informix要求一个chunk最小的大小是KB,所以这里的的-s不能小于。

然后在此dbspace上创建一张表,并插入两条数据,如下所示:

Informix也支持rowid,在普通表上,默认就会存在rowid,这种rowid叫Internalrowid,该rowid由两部分组成,最低的1个字节表示slotnum,高位3个字节表示pageoffset,pageoffset指的是在表上的偏移,这个和其它数据库不同,pageoffset连续的页面不一定存在相同的chunk上。对于分片表来说,rowid默认不存在,只有创建表的时候指定WITHROWIDS关键字来生成rowid,这种rowid叫Serialrowid,如果分片表指定了生成rowid,每一行数据将会多占用四个字节的物理存储空间,用于存储该serialrowid信息。

可以通过select语句查看rowid的信息,可以看到前面创建的表的两条记录保存在相同的页面0x上,一个的slot号是1,一个slot号是2,如下图所示:

但这个rowid不是物理存储空间的具体位置,要找到具体的物理存储空间还需要找到表对应的chunk所在的位置,这里涉及到表的一些存储结构。Informix还提供了一种简单的办法,可以用oncheck命令查看对应页面的数据:oncheck-ppdb:t,其中:

db:表示数据库的名字

t:是表的名字

:是前面查到的rowid,用也是一样的效果。

结果如下图所示:

在上表中列出了该页面的信息:

addr:2:54,其中的2表示chunknum,54表示页面在chunk上的偏移

stamp:,页面修改的时间戳信息

chksum:cb09,页面的校验信息

nslots:2,页面上保存的记录条数

flag:1,页面的标志

type:DATA,页面的类型,主要有数据、索引和空闲等情况

frptr:42,空闲空间起始位置

frcnt:,空闲空间总大小

next:0,跟索引页面有关系,用于保存树形索引的同级页面的下一个页面

prev:0,跟索引页面有关系,用于保存树形索引的同级页面的前一个页面

还有页面上保存的两行数据的基本信息:

slotptrlenflgslotdata

a

a56be6e79

现在看见了Informix页面上保存的数据,但这些数据都保存在什么位置,下一次我们再接着分析。

参考资料:









































白癜风医院
白癜风医院



转载请注明:http://www.xcqg58.com/zytd/863.html