mysql数据页slot_SQL SERVER 数据页面头部结构解析

解析数据页面头部结构: if object_id('test') is not null drop table test go create table test( id int,birth datetime,name char(10)) insert into test select 1,'2009-11-27','aaaa' union all select 2,'2009-11-27','aaaa' exec sp_spaceused 'te

解析数据页面头部结构:

if object_id('test') is not null

drop table test

go

create table test( id int,birth datetime,name char(10))

insert into test

select 1,'2009-11-27','aaaa' union all

select 2,'2009-11-27','aaaa'

exec sp_spaceused 'test'

结构:

name

rows

reserved

Data

index_size

unused

test

2

16 KB

8 KB

8 KB

0 KB

通过dbcc ind (test,test,0) 可以查看到该表有两个页,页号分别为109,和89,其中89为数据页。下面通过dbcc page 我们可以查看到该数据页的头部结构,下面我们就来解析头部结构每一个字段的含义。

dbcc traceon(3604)

dbcc page(test,1,89,1)

m_pageId = (1:89)

数据页号

m_headerVersion = 1

头文件版本号,从7.0以后,一直为1

m_type = 1

页面类型,1为数据页

m_typeFlagBits = 0x4

数据页和索引页为4,其他页为0

m_level = 0

该页在索引页(B树)中的级数

m_flagBits = 0x8000

页面标志

m_objId (AllocUnitId.idObj) = 83

m_indexId (AllocUnitId.idInd) = 256

Metadata: AllocUnitId = 72057594043367424

存储单元的ID

Metadata: PartitionId = 72057594038386688

数据页所在的分区号

Metadata: IndexId = 0

页面的索引号

Metadata: ObjectId = 2089058478

该页面所属的对象的id,可以使用object_id获得

m_prevPage = (0:0)

该数据页的前一页面

m_nextPage = (0:0)

该数据页的后一页面

pminlen = 26

定长数据所占的字节数

m_slotCnt = 2

页面中的数据的行数

m_freeCnt = 8034

页面中剩余的空间

m_freeData = 154

从第一个字节到最后一个字节的空间字节数

m_reservedCnt = 0

活动事务释放的字节数

m_lsn = (30:170:20)

日志记录号

m_xactReserved = 0

最新加入到m_reservedCnt领域的字节数

m_xdesId = (0:0)

添加到m_reservedCnt的最近的事务id

m_ghostRecCnt = 0

幻影数据的行数

m_tornBits = 0

页的校验位或者被由数据库页面保护形式决定分页保护位取代

注意在头文件中几个重要数据:

1、 pminlen = 26:除了表中固定数据所占的字节数外,还需要加上每行开始的4个字节

的行开销。即:

26=4(行开销)+4(int所占空间)+8(datetime 所占空间)+10(char(10)所占的空间)

2、 m_freeData = 154:页面文件的头结构+(存储每行数据需要的额外空间+数据自身的所占的空间)*(行数)

154=96+(7+22)*2=96+58

3、 m_freeCnt = 8034: 每个页面8K,减去m_freeData,再减去用来记录每行数据行偏移的所需要的空间,(每行2个字节)

8034=8192-154-4

4、 m_slotCnt = 2 该页面中数据的行数

注意下m_freeData这个字段的值,它实际的值是从第一个字节到最后一个字节的空间字节数。假如这个表的结构没有改变过,那么数据的存储是

头部结构(96B)

第一行数据

第二行数据

剩余空间

行的偏移

m_freeData的值是

这三部分数据所占空

间的总和

但是假如修改了表结构,没有进行分页,数据会向后向下移动,那么表的存储情况为变为:

头部结构(96B)

第一行数据

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值