网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 sql server 解析行溢出数据的存储
内容
    sql server2000中最大数据行的大小为8060(我们可以使用的大小为8039),即创建表时所有列的大小总和不能超过8060。在2005中,对于定长的数据,依然保留了这个限制(不过在2005中,我们可以使用的大小为8053,而不是8039)。那么在sql server2005中对于一行是不是只能存储最多8053字节的数据呢?能不能突破8060的这个限制呢?
    在sql server2000中没有办法,但是在sql server2005中,是有可能的。在sql server2005使用变长数据,可以突破8060的限制。因为sql server2005中对数据每行记录的限制做了一定的调整,对于包含变长类型的表,每一列的长度仍然必须在每行8000以内,但是它们的合并宽度可以超过8060b的限制。
    在sql server2005中,可以把变长列存储在行溢出页面。当一个列需要从一个常规页面转移到一个行溢出页面时,sql 2005会保留一个包含行溢出信息的指针作为原始记录的一部分,指针的大小为24b,并且对于每个变长列,无论该列是否存储在记录中,记录还需要2个字节。
    【测试】
    create table tb(col char(7000),col2 varchar(3000),col3 varchar(3000))
    go
    insert into tb
    values('aaa',replicate('bbb',1000),replicate('ccc',1000))
    go
    dbcc ind(test,tb,-1) -–得到的页面号为89,80,6321,6315.其中89,6321为iam页,80与6315为数据页
    dbcc traceon(3604)
    dbcc page(test,1,89,1)
    dbcc page(test,1,80,1)
    dbcc page(test,1,6321,1)
    dbcc page(test,1,6315,1)
    下面分别解析所生成的iam页与数据页,就可以看到行溢出数据在sql server2005中是如何来进行存储的。
    一、解析iam页
    因为89与6321页面结构是相同的,解析其中的第一即可,以89页为例。
    dbcc traceon(3604)
    dbcc page(test,1,89,1)
    得到的结果:
    1、 该页面总共两行
    2、 第一行记录了该iam记录的数据页(后面的注释说明了该数据的作用)
    00000000: 00005e00 00000000 00000000 00000000 †--该行的长度
    00000010: 00000000 00000000 00000000 00000000 †...............
    00000020: 00000000 00000000 00000000 01005000 †--负责的数据页面id
    00000030: 00000100 00000000 00000000 00000000 †...............
    二、解析数据页
    1、 解析80页面数据:
    00000000: 30005c1b 61616120 20202020 20202020 –-前四个字节就不解释了
    ……
    00001b50: 20202020 20202020 20202020 0300f802
    -–0300总共有三列,f8 null位图,0200变长列有两列
    00001b60: 007d9b95 9b020000 65010000 00f65c00
    --虽然第二列和第三列的数据存储在另外的数据页,但每个列依然会占用两个字节。
    00001b70: 00b80b00 00ab1800 00010000 00020000
    00001b80: 65010000 00c04700 00b80b00 00ab1800
    00001b90: 00010001 00
    020000 65010000 00f65c00 00b80b00 00ab1800 00010000 00
    第一个行溢出的指针
    020000 65010000 00c04700 00b80b00 00ab1800 00010001 00
    第二个行溢出的指针
    一个长度为24字节的指针。24字节包含的部分分别如下:
    0200
    00
    65
    01000000
    f65c0000
    b80b0000
    ab180000
    0100
    0000
    溢出列类型
    在b-树种的层次
    暂时不用,无实际意义
    lob数据更新的次数
    用于dbcc checktable使用的一个随机值,在lob存在的周期中不会改变
    该列的长度。
    (计算时为00000bb8)
    该部分数据所在的页面号
    该部分数据所在的文件号
    该部分数据所在页面中的slot号
    2、对于行溢出页面,使用的页面类型为lob。对于该页面的记录方式,以后再进行叙述。
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/12 19:57:07