图片 20

SQL SERVER大话存储结构(1)_数据页类型及页面指令分析

一.概述、

  ”流光容易把人抛,红了樱桃,绿了芭蕉“
转眼又年中了,感叹生命的有限,知识的无限。在后续讨论索引之前,先来了解下索引和表数据的内部结构,这一节将介绍页的存储,页分配单元类型,区的存储,
最后简要介绍下系统页存储类型,页中的数据结构。

1.1  页存储

  页是 sql server存储数据的基本单位,大小为8kb,
它存储的类型包括表,索引数据,分配位图,可用空间信息等,页也是可以读写的最小I/0单位。也就是如只需访问一行数据,也会把整个页加载到内存中。一页大小是8192个字节,由三块组成分为页头,数据行 ,
行偏移也叫页尾行指针。

  页头:有96个字节,包含的信息如PageID(文件号及页面编号),NextPage下一个页面的文件号及页面编号等。

  数据行:单个数据行最大为8060字节。

  末尾行偏移:
36字节的数组,数组中的每一个值指向页中数据。当插入一行数据时,偏移量从右下角开始存储,插入第二行时偏移量为2存放于1的左边,如下图所示:

图片 1

  一个页存储有三种分配单元类型: in_row_data
(行内数据), row_overflow_data( 行溢出数据), lob_data
LOB(大型数据)。

分配单元类型 描述
in_row_data 存放固定长度的列,以及可变长度的列。一行字节<= 8060字节的限制
row_overflow_data 存放<=8000字节的varchar,nvarchar, varbinary类型数据。一行字节>= 8060
lob_data 存放大型对象数据类型值 >=8000节字的varchar(max), nvarchar(max), varbinary(max), 以及xml或clr udt

1.2 区

   区是由8个物理上连续的页组成的单元,用来有效管理页,如是区内的8个页属于同一个表,则这种区叫统一区,如果区内8个页分别属于至少两个不同的表,则这种区叫混合区。当表或索引需要更多空间时,sqlserver会为对象分配一个新区,但对象不足64kb,通常只分配一个页,当drop或truncate表时将释放整个区。 

1.3 存储的关系

   每个数据表对应有一个objectID标识符, 
表中有多个索引为 sys.indexes,   表和索引存储在多个分区中
sys.partitions,但至少有一个分区。每个分区下面有8个物理连续页,
页中使用最频繁的文件类型是Data数据。

  下图展示表和索引存储结构以及对应的元数据查询。 分配单元可通过SELECT
* FROM sys.system_internals_allocation_units视图查看

图片 2

 

二. 索引与表存储关系演示

  2.1
首先建一个RowText表

CREATE TABLE [dbo].[RowText](
    [a] [varchar](3000) NULL
) ON [PRIMARY]

  2.2 根据表名,查到表的标识符objectID:  5575058。
这里显示了表的相关信息如创建时间,修改时间。

select * from sys.objects where name='RowText'

  图片 3

      2.3
 根据标识符objectID,找到表上的多个分区,这里只有一个区。找到标识hobt_id(是该区里堆或B树结构的标识):
72057594038976512

select * from sys.partitions where object_id=5575058

   
 图片 4

  2.4  再根据hobt_id: 72057594038976512,找到页分配的单元,
这里现只显示了in_row_data  行内数据,信息包括了行内数据使用的总页数,已使用页数,数据页数

select * from sys.allocation_units where container_id=72057594038976512

 
 图片 5

 

  三. 页分配单元演示

  3.1 上面讲到页分配单元有三种类型,通过下面的脚本可以来查看分析。

SELECT CONVERT(VARCHAR(10),OBJECT_NAME(i.object_id)) AS table_name,
     i.Name AS index_name,i.index_id,i.type_desc AS index_type,
     partition_id,partition_number,p.rows,allocation_unit_id,
     a.type_desc AS page_type_desc,
     a.total_pages,a.used_pages,a.data_pages
    FROM sys.indexes i JOIN sys.partitions p 
ON i.object_id=p.object_id and i.index_id=p.index_id
JOIN sys.allocation_units a ON p.partition_id=a.container_id
WHERE i.object_id=object_id('RowText')

  3.2 查看页存储的行内数据

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[RowText]') AND type in (N'U'))
DROP TABLE [dbo].[RowText]

go
CREATE TABLE [dbo].[RowText](
    [a] [varchar](3000) NULL
) ON [PRIMARY]

insert into RowText
select REPLICATE('a',3000)
insert into RowText
select REPLICATE('a',3000)
insert into RowText
select REPLICATE('a',3000)

  当前一行数据3000字节,小于一行8000字节,所以存放为IN_ROW_DATA类型,新增三行共9000字节,大于了一页8060字节,所以产生了data_pages:2页。通过3.1脚本查看

 图片 6

  3.2 查看页存储的行溢出数据

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[RowText]') AND type in (N'U'))
DROP TABLE [dbo].[RowText]
go
create TABLE [dbo].[RowText](
    [a] [varchar](3000) NULL,
    [b] [varchar](6000) NULL
) ON [PRIMARY]

insert into RowText
select REPLICATE('a',3000),REPLICATE('b',6000)

  当前一行数据为9000字节,大于一行8000字节,所以分配了ROW_OVERFLOW_DATA类型,通过3.1脚本查看

图片 7

  3.3  查看页存储的LOB大型数据

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[RowText]') AND type in (N'U'))
DROP TABLE [dbo].[RowText]
go
CREATE TABLE [dbo].[RowText](
    [a] [varchar](3000) NULL,
    [b] [varchar](6000) NULL,
    [c] [text] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

insert into RowText
select REPLICATE('a',3000),REPLICATE('b',6000),REPLICATE('c',12000)

  当前表包含了text类型,所以分配了LOB_DATA大型数据,通过3.1脚本查看

  图片 8

     
 最后简单总结下:在设计表字段时,一定要与业务相符合,尽量避免建大型字段,产生行溢出和LOB大型数据,从而造成页拆分,查询将需要跨页。原理是当一行超过8060字节时,这类型的值将被移动到一个称为行溢出分配单元页中,在原始页上保留一个24字节指针,指向行外数据,这样就完成了行跨页。
存放大型对象数据类型值时,在原始页上保留一个16字节指针,指向该大型对象值。

 

 四  页单元文件类型

  我们知道页文件主要是用来存储表和索引的数据,其实还包括其它的存储,
在sqlserver里页文件存储的类型也分9种,如下图所示

页类型

内容

Global Allocation Map (GAM)

它用来标识相应的区是否已经被分区,能标识64000个区,也就是4G空间,如超过4G则分配另一个GAM页 bit=0 表示当前区已被数据使用

.Shared Global Allocation Map(SGAM)

表示该区是否是混合区 bit=1 是混合区且至少有一个数据页被分配

Page Free Space

存储该文件里所有页分配情况,和可用空间信息

Index Allocation Map

表或索引使用该区的信息

Bulk Changed Map

最后一条 backup log 语句之后大容量操作所修改区的信息

Differential Changed Map

最后一条 backup database 语句之更改区的信息

Data

用来存储数据

Row Overflow Page

行溢出的数据

LOB

存放大型对象数据:text,nvarchar(max),varchar(max)…


 五.数据页的结构

  在sql
server里有这么多页文件类型,哪个页里是怎么存储的,存储了什么内容呢?下面来查看一个数据页存储的信息

  下面通过partition_id的标识符:72057594038976512
找到first_page 字段
第一页

select * from sys.system_internals_allocation_units where container_id=72057594038976512

  图片 9

   由于存储关系,页码是以字节16进制显示0x720000000100,这里需要倒序后就是0x010000000072,

  0x表示:文件组号

  0072从16进制转成10进制为第114页(后四字节代表页的编号)

  通过Dbcc page可以查看页的具体内容,使用之前dbcc page, 先打开dbcc
traceon (3604) 告诉sql server将结果返回给客户端 ,dbcc Page 四个参数
如下:

dbid | dbname 该页的数据库ID或数据
Filenum 页面文件号
Pagenum 页面号
Printopt =1 对每条记录打印缓冲报头,页面报头,输出行偏移表

  具体使用如下:

  dbcc traceon (3604)

  dbcc page(‘test’,1,114,1)

  数据页结构输出分为四个主要阶段:buffer,  page
header, data,  offset table

  Buffer: 用来标识该数据页在内存中的位置。

  page header: 页头信息

  data:存储的数据

  offset table: 偏移量

  感兴趣的朋友,可以再深入研究。这里粗略讲下。

PAGE: (1:114)


BUFFER:


BUF @0x0000000081FE4640

bpage = 0x0000000081B66000           bhash = 0x0000000000000000           bpageno = (1:114)
bdbid = 5                            breferences = 0                      bcputicks = 222
bsampleCount = 1                     bUse1 = 5256                         bstat = 0xc00009
blog = 0x32159                       bnext = 0x0000000000000000           

PAGE HEADER:


Page @0x0000000081B66000

m_pageId = (1:114)                   m_headerVersion = 1                  m_type = 1
m_typeFlagBits = 0x4                 m_level = 0                          m_flagBits = 0x8200
m_objId (AllocUnitId.idObj) = 35     m_indexId (AllocUnitId.idInd) = 256  
Metadata: AllocUnitId = 72057594040221696                                 
Metadata: PartitionId = 72057594038976512                                 Metadata: IndexId = 0
Metadata: ObjectId = 5575058         m_prevPage = (0:0)                   m_nextPage = (0:0)
pminlen = 4                          m_slotCnt = 2                        m_freeCnt = 2070
m_freeData = 6118                    m_reservedCnt = 0                    m_lsn = (27:202:2)
m_xactReserved = 0                   m_xdesId = (0:0)                     m_ghostRecCnt = 0
m_tornBits = 2253409                 

Allocation Status

GAM (1:2) = ALLOCATED                SGAM (1:3) = ALLOCATED               
PFS (1:1) = 0x62 MIXED_EXT ALLOCATED  80_PCT_FULL                         DIFF (1:6) = CHANGED
ML (1:7) = NOT MIN_LOGGED            

DATA:


Slot 0, Offset 0x60, Length 3011, DumpStyle BYTE

Record Type = PRIMARY_RECORD         Record Attributes =  NULL_BITMAP VARIABLE_COLUMNS
Record Size = 3011                   
Memory Dump @0x000000001116A060

0000000000000000:   30000400 01000001 00c30b61 61616161 ?0..........aaaaa 
0000000000000010:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000020:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000030:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000040:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000050:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000060:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000070:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000080:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000090:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000100:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000110:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000120:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000130:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000140:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000150:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000160:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000170:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000180:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000190:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000200:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000210:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000220:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000230:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000240:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000250:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000260:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000270:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000280:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000290:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000300:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000310:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000320:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000330:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000340:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000350:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000360:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000370:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000380:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000390:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000400:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000410:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000420:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000430:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000440:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000450:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000460:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000470:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000480:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000490:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000500:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000510:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000520:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000530:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000540:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000550:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000560:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000570:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000580:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000590:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000600:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000610:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000620:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000630:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000640:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000650:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000660:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000670:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000680:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000690:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000700:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000710:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000720:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000730:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000740:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000750:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000760:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000770:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000780:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000790:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000800:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000810:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000820:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000830:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000840:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000850:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000860:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000870:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000880:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000890:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000900:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000910:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000920:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000930:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000940:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000950:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000960:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000970:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000980:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000990:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A00:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A10:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A20:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A30:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A40:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A50:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A60:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A70:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A80:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A90:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AA0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AB0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AC0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AD0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AE0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AF0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B00:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B10:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B20:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B30:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B40:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B50:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B60:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B70:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B80:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B90:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000BA0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000BB0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000BC0:   616161???????????????????????????????aaa              

Slot 1, Offset 0xc23, Length 3011, DumpStyle BYTE

Record Type = PRIMARY_RECORD         Record Attributes =  NULL_BITMAP VARIABLE_COLUMNS
Record Size = 3011                   
Memory Dump @0x000000001116AC23

0000000000000000:   30000400 01000001 00c30b61 61616161 ?0..........aaaaa 
0000000000000010:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000020:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000030:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000040:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000050:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000060:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000070:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000080:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000090:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000000F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000100:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000110:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000120:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000130:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000140:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000150:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000160:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000170:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000180:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000190:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000001F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000200:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000210:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000220:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000230:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000240:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000250:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000260:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000270:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000280:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000290:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000002F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000300:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000310:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000320:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000330:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000340:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000350:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000360:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000370:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000380:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000390:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000003F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000400:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000410:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000420:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000430:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000440:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000450:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000460:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000470:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000480:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000490:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000004F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000500:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000510:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000520:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000530:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000540:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000550:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000560:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000570:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000580:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000590:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000005F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000600:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000610:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000620:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000630:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000640:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000650:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000660:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000670:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000680:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000690:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000006F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000700:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000710:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000720:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000730:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000740:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000750:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000760:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000770:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000780:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000790:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000007F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000800:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000810:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000820:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000830:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000840:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000850:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000860:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000870:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000880:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000890:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000008F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000900:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000910:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000920:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000930:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000940:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000950:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000960:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000970:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000980:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000990:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009A0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009B0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009C0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009D0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009E0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
00000000000009F0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A00:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A10:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A20:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A30:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A40:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A50:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A60:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A70:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A80:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000A90:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AA0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AB0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AC0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AD0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AE0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000AF0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B00:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B10:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B20:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B30:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B40:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B50:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B60:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B70:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B80:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000B90:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000BA0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000BB0:   61616161 61616161 61616161 61616161 ?aaaaaaaaaaaaaaaa 
0000000000000BC0:   616161???????????????????????????????aaa              

OFFSET TABLE:

Row - Offset                         
1 (0x1) - 3107 (0xc23)               
0 (0x0) - 96 (0x60)                  


DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

  


 

   
如果转载,请注明博文来源: www.cnblogs.com/xinysu/ 
 ,版权归 博客园 苏家小萝卜 所有。望各位支持!

  



 

   
SQLServer的数据页大小是8kb,8个连续的物理页组成一个区。区分混合区跟统一区,混合区内可以存储不同数据库对象的内容,通常这个数据库对象较小;统一区表示区内连续的8个数据页存储的都是同一个数据库对象的内容。

 

    SQL
SERVER的磁盘读写是按页级进行,每次I/O操作的数据最小单位是以8kb为单位的页。页是存储单位,区是管理单位。

    数据页根据其存储内容不同,分为多种类型,本文简要描述。

1 数据页的类型

  
不同类型的数据,存储在不同类型的页面里,大致可以分为3个方向:存储实际数据的、存储管理数据页数据的及存储备份相关的数据,这3个反向,又各有不同的page
type。详见下表。

 

Id

User_for

Page Type

Page Name

Description

1

实际数据

数据页

Data Page

堆表或者聚集索引的叶子节点

2

索引页

Index Page

聚集索引的分支节点或者非聚集索引

3

LOB

LOB

用来存放大型对象数据类型:text , image ,varchar(max) , varbinary(max)等

4

行溢出页

Row Overflow Page

只能存储单一text或者image列数据块

5

管理数据页数据

GAM页

Global Allocation Map

管理统一区的位图

6

SGAM页

Shared Global Allocation Map

管理混合区的位图

7

IAM页

Index Allocation Map

分配单元分配到的区

8

PFS页

Page Free Space

可用空间

9

备份相关的数据

DCM页

Differential Changed Map

自最后一条backup database 语句之后更改的区的信息

10

BCM页

Bulk Changed Map

自最后一条backup log语句之后的大容量操作所修改的区的信息

 

   
针对备份相关数据的页面类型,这里不做详细描述。存储实际数据的页面类型,
后面会有几篇博文详细描述。本文重点讲解下 存储 管理数据页数据
的页面类型:GAM,SGAM,IAM,PFS
。这块,对tempdb的性能优化会有比较大的帮助。

   
每一个数据文件的开头都分布GAM,SGAM,PFS这些页面,它们记录了这个数据库文件中哪些页面已经被使用,哪些页面还没有使用。

图片 10

 

1.1 PFS

     
PFS页,用来跟踪页分配级别,存储当前数据文件里所有页分配及可用空间的信息,每一个数据文件的第2个数据页都是PFS,页号为1
。该页面中,每一个字节描述后面每一个数据页是否还有空间可以写记录,也就是一个PFS页是8k,约有8k个字节可以描述后续每个页面的使用情况,也就是一个PFS页,可以描述8k个数据页的使用情况,这就意味着单个PFS页能够存储约64M数据页的可用空间情况。所以,大约每隔64Mb,就会有一个新的PFS页。

   
每个字节描述一个数据页的使用情况,一个字节有8个bits,分别第0-7位,用途如下:

  • bit 0-2位,描述该页还有多少空闲空间
    • 0x00 is empty
    • 0x01 is 1 to 50% full
    • 0x02 is 51 to 80% full
    • 0x03 is 81 to 95% full
    • 0x04 is 96 to 100% full
  • bit 3 (0x08): 该数据页是否存在鬼影记录(ghost
    records:http://www.cnblogs.com/lyhabc/archive/2013/06/16/3138214.html)?
  • bit 4 (0x10): 是否是IAM页?
  • bit 5 (0x20): 是否是混合页?
  • bit 6 (0x40): 是否已分配使用?
  • Bit 7 保留,未使用,无实际含义

1.2 GAM & SGAM

    SQL SERVER的区分为两种类型:混合区(uniform extent)跟统一区(mixed
extent)。

   
混合区,指区内连续的8个数据页,分别分配给不同的数据库对象存储使用,这有利于小表在使用的过程中,没有一下子就占据了一个区,而是先从混合区使用,合理分配空间;统一区,指的是区内连续8个页都是用来存储同一个数据对象的,当一个表格分配了8个混合区页后,会开始分配使用统一区,避免数据分散存储在各个不连续的数据页中。

1.2.1 GAM

 
GAM页,用来跟踪区的分配情况,描述每区是否被分配,每个区用1bit标识其分配情况。一个GAM页8k,一共有8k*8
bit,也就是差不多可以标识 64000个区,约 8k*8bit*(8*8k)=4G
空间,所以,大概每隔
4G空间左右,就有一个GAM页来标识下一个4G的空间分配情况。

  • Bit=1,标识当前的区是空闲的,可以用来分配;
  • Bit=0,标识当前的区以及被数据使用。

    SQL
Server通过读取GAM页找到可用空间,并把这个区或者区内的某一个页分配给一个对象。一个范围仅存储一个比特(而不是像PFS页,PFS是一个页一个字节),意味着单个GAM页能够追踪更多空间,在一个数据文件中,你可以在大约4GB间隔的空间找到一个新GAM页。然而,数据文件中的第一个GAM页的页码总是2,因此“2:1:2”就表示tempdb中的第一个GAM页。

1.2.2 SGAM

   
SGAM页,用来跟踪区的分配情况,描述哪些区是混合区并且至少有一个空闲的数据页。1bit描述一个区,1表示该区是混合区且至少有一个空闲的数据页,代表该区可以分配给需要使用混合区的对象。

    SQL
Server通过读取SGAM页来找到与可用空间混合的范围来把空间分配给小对象。单个SGAM页能够追踪4GB的空间,因此,你可以在4GB的间隔中找到它们,就像GAM页一样。在数据文件中,第一个SGAM页是页3,所以“2:1:3”就表示tempdb的第一个SGAM页。

    那么,这两种类型的数据页是如何协助存储引擎对区进行管理的呢?

  • 当存储引擎分配一个统一区时,在GAM页中寻找标记为1的页面,把标记修改为0,SGAM页中的标记位不做变动,保持为0;
  • 当存储引擎分配一个混合区时,在GAM页中寻找标记为1的页面,把标记修改为0,SGAM页中的标记位从0修改1;
  • 当存储引擎寻找一个有空闲页的混合区是,直接在SGAM页中查找标记位1对应的数据页;如果没有找到,则会重新分配一个混合区。

1.2.3 IAM

   
区的分配,使用GAM及SGAM管理;页的使用情况,采用PFS页管理。那么,每一个数据库对象在各个页里或者区里的存储情况,由谁协助管理呢?答案是
IAM页。

   
一个表格中,IAM页用来描述数据的分布情况,基于分配单元来描述。根据实际数据的存储情况,分为以下3种分配单元:

  • IN_ROW_DATA
    • 存储堆或索引分区,即heap和B-tree。
  • LOB_DATA
    • 存储大型对象 (LOB)
      数据类型,例如 xml、varbinary(max) 和 varchar(max)。
  • ROW_OVERFLOW_DATA
    • 存储超过 8,060
      字节行大小限制的 varchar、nvarchar、varbinary 或 sql_variant 列中存储的可变长度数据。

    每个有数据的表格,至少有一个 IAM页来管理
IN_ROW_DATA的存储情况,如果表格里有LOB_DATA,则会多一个IAM页来管理LOB_DATA,ROW_OVERFLOW_DATA也是一样。

2 数据页结构

    数据页有4个部分:页头、行记录、空闲空间及行偏移量。详见下图:

    图片 11

2.1 页头

占用96字节,存储跟该页面相关的系统数据。

    页头的内容如下:
图片 12

2.2 行记录

  • 存储数据行记录以及索引数据
  • 行记录也可以在独立页面上存储,比如行溢出数据即LOB数据

2.3 空闲空间

  • 除去页头,行记录,以及偏移量剩下的空间,提供给行记录及行偏移量使用

2.4 行偏移量

  • 行偏移是一个个小块组成的,每个小块2个字节,表示数据行从第几个字节后开始记录,也就是距离页头多少偏移量开始记录
  • 存储方式是从有往左存储,用槽位来描述,slot 0 ,slot 1 ….
  • 行偏移量记录的内容是什么呢?该行记录从哪个字节开始,一般情况下,slot
    1 从第96个字节后开始
  • 常说的聚集索引存储顺序是物理排序,指的不是行记录物理排序,而是行偏移量物理排序,数据页中,行记录都是顺序往后添加的,通过修改行偏移量来达到聚集索引的顺序查找

3 查询数据页存储格式的途径

     查看数据页存储方式这里简单介绍两种方式:dbcc page查看以及dbcc
ind查看,这两个指令都是非公开的指令,所以msdn上找不到相应的使用说明。不过,还是可以通过
技术内幕的相关资料来查阅分析。

这两个指令在打开跟踪标记2588后可以查看其参数说明,打开跟踪标记3604后,可以把指令执行结果放回到客户端而不是记录在错误日志中。

3.1 dbcc ind

3.1.1 语法说明

    查看ind的参数说明,打开跟踪标记2588,help查询。

 

DBCC TRACEON(2588)
DBCC HELP('ind')

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
dbcc IND ( { 'dbname' | dbid }, { 'objname' | objid }, { nonclustered indid | 1 | 0 | -1 | -2 } [, partition_number] )

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

 

  输出的格式有4种方式,不同方式,输出不一样。 

  • -2:返回所有IAM页,基于管理行内数据页,行溢出数据页及大对象数据页的IAM页
  • -1:返回所有IAM页及数据页。
  • 0:返回管理行内数据页的IAM页,行内数据页
  • 1:返回聚集索引的数据页信息及IAM页信息(同-1)
  • 2:返回第1个非聚集索引的数据页信息及IAM页信息
  • 3:返回第2个非聚集索引的数据页信息及IAM页信息
  • n:返回第(n-1)个非聚集索引的数据页信息及IAM页信息(n>1)

图片 13

 

3.1.2 测试案例

   
新建表格,tbpage_c,包含大数据对象及行溢出情况。INSERT一行数据,然后分析。数据库中,每行数据默认存储在同一个数据页,如果一个数据页存储不了一行数据,则会出现行溢出情况,具体可自行了解行溢出,所以在这个表格里边,设置两个数据列占用空间>8k,具体见表SQL如下,造数据的SQL如下。

 

create table tbpage_c(id int identity(1,1) not null primary key ,namea varchar(6000),nameb varchar(3000),descriptions text)

#name_a INSERT 6000个字符,name_b INSERT 3000个字符,descriptions INSERT 100个字符

INSERT INTO tbpage_c(NAMEA,nameb,descriptions)
select
      substring(stuff((select name+',' from master.dbo.spt_values for xml path('')),1,1,''),1,6000) ,
      substring(stuff((select name+',' from master.dbo.spt_values for xml path('')),1,1,''),1,3000) ,
      substring(stuff((select name+',' from master.dbo.spt_values for xml path('')),1,1,''),1,100)

 

dbcc ind(‘dbpage’,’tbpage_c’,-2)

选项为-2,显示表格的所有IAM页面。由于表格存在行溢出及大对象列,所以会有其相对应的IAM页面,故可以看到有3个IAM,分别为 In-row
data ,Row-overflow data ,LOB data。

 图片 14

 

dbcc ind(‘dbpage’,’tbpage_c’,-1)

选项为-1,返回所有IAM页及数据页。

  • 数据页号310,309属于 In-row data
    类型。309记录实际数据,310记录In-row data实际数据页的分布情况。
  • 数据页号307,308属于 Row-overflow
    data 类型。307记录实际数据,308记录 Row-overflow
    data 实际数据页的分布情况。
  • 数据页号305,306属于 LOB data 类型。305记录实际数据,306记录 LOB
    data  实际数据页的分布情况。

 图片 15

 

dbcc ind(‘dbpage’,’tbpage_c’,0)

选项为0,返回管理行内数据页的IAM页,行内数据页,故此处仅返回 In-row data
相关数据页。

 图片 16

 

dbcc ind(‘dbpage’,’tbpage_c’,1)

选项为1,返回聚集索引涉及到所有IAM页及数据页。

 图片 17

3.2 dbcc page

3.2.1 语法说明

    查看page的参数说明,打开跟踪标记2588,help查询。

 

DBCC TRACEON(2588)
DBCC HELP('PAGE')

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
dbcc PAGE ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系

    输出的格式有4种方式,不同方式,输出不一样。

  • 0:输出可读形式的数据页页头数据
  • 1:输出可读形式的数据页页头数据,并且还有槽位对应记录的十六进制内容
  • 2:输出可读形式的数据页页头数据,输出整个数据页页头的十六进制数据,整一页的内容都显示,包括未使用的空间。
  • 3:输出可读形式的数据页页头数据,并且包括记录中每个字段的可读形式,行溢出数据也会显示数据内容,但是大对象则不显示内容,而是说明其存储位置!所以选项3,也是输出内容最全面的。

3.2.2 测试案例

    采用3.1.2的表格,分析其 IN_ROW DATA的数据页面,page_id=309 。

    本次测试,没有采用 with tableresults分析,如果dbcc
page(‘dbpage’,1,309,0) with
tableresults
,结果则是已表格形式返回,可以提供后期管理分析用。

    选项为0,输出可读格式的数据页 页头数据。

 

DBCC TRACEON(3604)
dbcc page('dbpage',1,309,0)


----------------------------------------------------------------------------------------------------------

PAGE: (1:309)

BUFFER:

BUF @0x000000027C0827C0

bpage = 0x000000026FA86000          bhash = 0x0000000000000000          bpageno = (1:309)
bdbid = 10                          breferences = 0                     bcputicks = 0
bsampleCount = 0                    bUse1 = 46781                       bstat = 0xb
blog = 0x212121cc                   bnext = 0x0000000000000000

PAGE HEADER:

Page @0x000000026FA86000

m_pageId = (1:309)                  m_headerVersion = 1                 m_type = 1
/* 
m_pageId 当前页面号码;m_headerVersion 版本号,始终为1;m_type 页面数据类型,1为数据页面,10为IAM页面等,具体参考pagetype
*/
m_typeFlagBits = 0x0                m_level = 0                         m_flagBits = 0xc000
/*
m_typeFlagBits 数据页和索引页为4,其他页为0
m_level 该页在索引页(B树)中的级数,0表示为叶子节点
m_flagBits 页面标志
*/
m_objId (AllocUnitId.idObj) = 35    m_indexId (AllocUnitId.idInd) = 256
/*
m_indexId (AllocUnitId.idInd) 索引ID,0 代表堆, 1 代表聚集索引, 2-250 代表非聚集索引 大于250就是text或image字段
*/
Metadata: AllocUnitId = 72057594040221696
Metadata: PartitionId = 72057594038976512                                Metadata: IndexId = 1
Metadata: ObjectId = 341576255      m_prevPage = (0:0)                  m_nextPage = (0:0)
/*
Metadata: AllocUnitId 存储单元的ID,sys.allocation_units.allocation_unit_id
Metadata: PartitionId 数据页所在的分区号,sys.partitions.partition_id
Metadata: ObjectId 该页面所属的对象的id,sys.objects.object_id
Metadata: IndexId sys.objects.object_id&sys.indexes.index_id
m_prevPage 该数据页的前一页面
m_nextPage 该数据页的后一页面
*/
pminlen = 8                         m_slotCnt = 1                       m_freeCnt = 5035
m_freeData = 3155                   m_reservedCnt = 0                   m_lsn = (39:400:68)
m_xactReserved = 0                  m_xdesId = (0:0)                    m_ghostRecCnt = 0
m_tornBits = 0                      DB Frag ID = 1
/*
pminlen  定长数据所占的字节数为多少个字节
m_slotCnt 页面中的数据的行数
m_freeCnt 页面中剩余的空间,还剩多少字节的空间
m_freeData 页面空闲空间的起始位置,一个页面8KB约等于8192字节 页面空闲空间的位置在3155
m_reservedCnt  活动事务释放的字节数
m_lsn 日志记录号
m_xactReserved 最新加入到m_reservedCnt领域的字节数
m_xdesId 添加到m_reservedCnt的最近的事务id
m_ghostRecCnt 幻影数据的行数
m_tornBits 页的校验位或者被由数据库页面保护形式决定页面保护位取代

数据库页面的 lsn
SQL Server在内存中维护一个哈希表,记录下自己所有做过写入动作的页面最新的LSN(Log Sequence Number)值。
在下次读出页面的时候,会去比较这两个值是否相等。由于LSN是个自动增长的唯一值,每个发生新修改的页面,
LSN的值会比原来的要大。所以如果读到的LSN与内存中存放的不一致,就说明上次的写入请求没有真正完成。
这时824错误也会被触发。
*/

Allocation Status

GAM (1:2) = ALLOCATED               SGAM (1:3) = ALLOCATED
PFS (1:1) = 0x60 MIXED_EXT ALLOCATED   0_PCT_FULL                        DIFF (1:6) = CHANGED
ML (1:7) = NOT MIN_LOGGED

 

 

选项为1,输出可读形式的数据页页头数据,并且还有槽位对应记录的十六进制内容。页头数据已在上文分析,不做处理,这里截图描述槽位对应记录

dbcc page('dbpage',1,309,1)

----------------------------------------------------------------------------------------------------------
页头信息省略中...


Slot 0, Offset 0x60, Length 3059, DumpStyle BYTE
/*
Slot 槽位号,一个槽位一行数据,这一行数据从 0x60 = 96开始,长度是 3059 bytes
下文文该行记录的16进制内容
*/
Record Type = PRIMARY_RECORD        Record Attributes =  NULL_BITMAP VARIABLE_COLUMNS
Record Size = 3059                 
Memory Dump @0x000000001F978060

/*下文为这一行记录 3059个字节内容*/
0000000000000000:   30000800 01000000 0400a003 002b80e3 0bf38b02  0............+......
0000000000000014:   00000001 000000d5 69000070 17000033 01000001  ........i..p...3....
0000000000000028:   00000028 72707429 2c594553 204f5220 4e4f2c53  ...(rpt),YES OR NO,S
000000000000003C:   59535245 4d4f5445 4c4f4749 4e532054 59504553  YSREMOTELOGINS TYPES
中间省略...
0000000000000BCC:   7072696d 61727920 6b65792c 616e7369 5f6e756c  primary key,ansi_nul
0000000000000BE0:   6c5f6400 00d10700 00000031 01000001 000100    l_d........1.......

OFFSET TABLE:

Row - Offset                       
0 (0x0) - 96 (0x60)     

 

选项为2, 输出整个数据页页头的十六进制数据,整一页的内容都显示,包括未使用的空间。


dbcc page('dbpage',1,309,2)

----------------------------------------------------------------------------------------------------------
页头信息省略中...

/*下文为一整页的数据存储情况,包括行记录跟空闲空间,不区分槽位*/
DATA:

Memory Dump @0x0000000028178000

0000000028178000:   01010000 00c00001 00000000 00000800 00000000  ....................
0000000028178014:   00000100 23000000 ab13530c 35010000 01000000  ....#.....S.5.......
0000000028178028:   27000000 90010000 44000000 00000000 00000000  '.......D...........
000000002817803C:   00000000 01000000 00000000 00000000 00000000  ....................
0000000028178050:   00000000 00000000 00000000 00000000 30000800  ................0...
0000000028178064:   01000000 0400a003 002b80e3 0bf38b02 00000001  .........+..........
0000000028178078:   000000d5 69000070 17000033 01000001 00000028  ....i..p...3.......(
000000002817808C:   72707429 2c594553 204f5220 4e4f2c53 59535245  rpt),YES OR NO,SYSRE
00000000281780A0:   4d4f5445 4c4f4749 4e532054 59504553 2c535953  MOTELOGINS TYPES,SYS
省略中...
0000000028178C1C:   65726963 20726f75 6e646162 6f72742c 7072696d  eric roundabort,prim
0000000028178C30:   61727920 6b65792c 616e7369 5f6e756c 6c5f6400  ary key,ansi_null_d.
0000000028178C44:   00d10700 00000031 01000001 00010000 00212121  .......1.........!!!
0000000028178C58:   21212121 21212121 21212121 21212121 21212121  !!!!!!!!!!!!!!!!!!!!
0000000028178C6C:   21212121 21212121 21212121 21212121 21212121  !!!!!!!!!!!!!!!!!!!!
省略中...
0000000028179FE0:   21212121 21212121 21212121 21212121 21212121  !!!!!!!!!!!!!!!!!!!!
0000000028179FF4:   21212121 21212121 21216000                    !!!!!!!!!!`.

OFFSET TABLE:

Row - Offset
0 (0x0) - 96 (0x60)

   
选项为3,
输出可读形式的数据页页头数据,并且包括记录中每个字段的可读形式,行溢出数据也会显示数据内容,但是大对象则不显示内容,而是说明其存储位置!

dbcc page('dbpage',1,309,3)


-------------------------------------------------------------------------------------------------
页头信息省略中...

Slot 0 Offset 0x60 Length 3059
/*
Slot 槽位号,一个槽位一行数据,这一行数据从 0x60 = 96开始,长度是 3059 bytes
*/
Record Type = PRIMARY_RECORD        Record Attributes =  NULL_BITMAP VARIABLE_COLUMNS
Record Size = 3059
Memory Dump @0x000000002BB78060

/*下文为这一行记录 3059个字节内容*/
0000000000000000:   30000800 01000000 0400a003 002b80e3 0bf38b02  0............+......
0000000000000014:   00000001 000000d5 69000070 17000033 01000001  ........i..p...3....
0000000000000028:   00000028 72707429 2c594553 204f5220 4e4f2c53  ...(rpt),YES OR NO,S
000000000000003C:   59535245 4d4f5445 4c4f4749 4e532054 59504553  YSREMOTELOGINS TYPES
0000000000000050:   2c535953 52454d4f 54454c4f 47494e53 20545950  ,SYSREMOTELOGINS TYP
0000000000000064:   45532028 55504441 5445292c 41463a20 61676772  ES (UPDATE),AF: aggr
0000000000000078:   65676174 65206675 6e637469 6f6e2c41 503a2061  egate function,AP: a
中间省略...
0000000000000BB8:   2c6e756d 65726963 20726f75 6e646162 6f72742c  ,numeric roundabort,
0000000000000BCC:   7072696d 61727920 6b65792c 616e7369 5f6e756c  primary key,ansi_nul
0000000000000BE0:   6c5f6400 00d10700 00000031 01000001 000100    l_d........1.......

/*下文为 在槽位0 slot 0 的 这一行记录 ,详细描述每一列的存储情况*/
Slot 0 Column 1 Offset 0x4 Length 4 Length (physical) 4
/*slot 0,第一列 在本页占用4字节,列名为id,值为1*/
id = 1

namea = [BLOB Inline Root] Slot 0 Column 2 Offset 0x13 Length 24 Length (physical) 24
/*slot 0,第2列,本页占用24字节,列名为namea
这里可以看到是发生了行溢出情况,列中没有数据,但是存储了该列的实际位置
实际大小为6000字节,值 存储在第一个文件第307页的 slot 0 槽位上*/

Level = 0                           Unused = 0                          UpdateSeq = 1
TimeStamp = 1775566848              Type = 2
Link 0

Size = 6000                         RowId = (1:307:0)

Slot 0 Column 3 Offset 0x2b Length 3000 Length (physical) 3000

nameb = (rpt),YES OR NO,SYSREMOTELOGINS TYPES,SYSREMOTELOGINS TYPES (UPDATE),AF: aggregate function,AP: applicati
on,C : check cns,...省略中...primary key,ansi_null_d
/*slot 0,第3列 ,本页占用3000字节,列名为nameb ,值为 nameb= 的后面一大段中*/

descriptions = [Textpointer] Slot 0 Column 4 Offset 0xbe3 Length 16 Length (physical) 16
/*slot 0,第4列 ,该列为text数据类型,本页占用16字节,列名为descriptions,其值存储在第一个文件的第305页的 slot 1 槽位上*/

TextTimeStamp = 131137536           RowId = (1:305:1)

Slot 0 Offset 0x0 Length 0 Length (physical) 0

/*该表格有主键 ,该行的keyhashvalue值*/

KeyHashValue = (8194443284a0)

 

   
选项为3,还有一个特殊情况,就是当分析非聚集索引的时候,其返回会多一个
table 

 

create table tbpage(id int primary key not null identity(1,1) ,cola int,colb varchar(10),colc varchar(100))

insert into tbpage(cola,colb,colc) select object_id,type,name from sys.objects

create index ix_colc on tbpage(colc)

select * from sys.indexes where name='ix_colc'

dbcc ind('dbpage','tbpage',-1)

 

 图片 18

 

 dbcc page(‘dbpage’,1,319,3)

返回多了一个可读性的列表,详细描述索引的列情况及键值情况,同时,原先的消息内容也还保持。

 图片 19图片 20

 

 

 

参考博文:

http://www.sqlservercentral.com/blogs/practicalsqldba/2012/10/10/sql-serverunderstanding-the-page-free-space-pfs-page/

http://www.sqlservercentral.com/blogs/practicalsqldba/2013/03/07/sql-server-understanding-the-iam-page/

 

参考书籍:

《SQL SERVER 2012 实施与实战管理指南》
《SQL Server性能调优实战》

《SQL SERVER 2005 技术内幕 存储引擎》