理解数据页结构,Server内幕之数据页

但是, 由于平时不须要查阅数据页的始末, 因而在 SQL server 文书档案中找不到有关
DBCC 页的音信。

实行如下的命令:

行偏移量数组

1 DBCC IND('InternalStorageFormat','Customers',-1)

保险行长更加短能够使更加多行适合页面, 从而减弱 i/o
并追加所需数据在缓存中的恐怕。

结余的 3陆 bytes
(81九二-96-8060)保留给槽数组(Slot
array)大概其它转发行重回指针(forwarding
row back pointer)(每条10bytes)。那就象征七个页不鲜明就能保存1捌(36/贰)条记下。槽数组(Slot
array)依据你的记录数从下往上坚实。假使记录长度小,页里就能够积存越来越多的笔录,偏移表也会自下而上占用越多的空中。 

 

参照小说:

http://www.sqlservercentral.com/blogs/practicalsqldba/2012/08/12/sql-server-understanding-the-data-page-structure/

 

1 DBCC TRACEON(3604)
2 DBCC PAGE(InternalStorageFormat,1,79,3)
3 GO    

 

8 * 10二四 =
页的总大小,八K

DBCC 页面命令包蕴表陆-陆 中展示的参数。

SQL
Server在输出音讯的尾部,给大家如下的音讯:

有着全部固定长度列的表始终能够积攒每页一样的行数;

 永利皇宫登录网址 1

反而, 偏移量数组中的插槽0引用集中索引键顺序中的第二行, 插槽一引用第一行,
依此类推。

  • GAM (一:2) = ALLOCATED
                                                   
      在GAM页上的分配情形
  • SGAM (壹:三) = ALLOCATED
                                                 
      在SGAM页上的分配情状
  • PFS (1:1) = 0x61
    MIXED_EXT ALLOCATED 
    50_PCT_FULL 在PFS页上的分配情形,该页为5/拾满,                       

  • DIFF (1:6) =
    CHANGED

  • ML (1:7) = NOT
    MIN_LOGGED   

行数据分为三片段。

 

行偏移量数组是2字节项的块, 每一个条目款项表示相应数据行初步的页面上的偏移量。

(8 * 1024) – 96 – (217 *
2)-(7 * 2)-(2 * 2)=7644 bytes

假定没有此 traceflag, 则不会为 DBCC 页命令归来输出。

后天大家要寻觅SQL
Server给那一个表分配的页有怎么样,那一个就要采用非文书档案的授命DBCC
IND。
它的语法如下:

从 DBCC 页的 “输出” 页标题部分显得页上具备标题字段的数额。

  • Page @0x08F84000      
         同BUFFER中的bpage地址
  • m_pageId
    = (1:7玖)              数据页号     
  • m_headerVersion
    = 一         头文件版本号,一向为一          
  • m_type =
    一                          页面类型,1为数据页面
  • m_typeFlagBits
    = 0x四         数据页和索引页为4,其余页为0        
  • m_level =
    0                         该页在索引页(B树)中的级数
  • m_flagBits
    = 0x七千          页面标记
  • m_objId
    (AllocUnitId.idObj) = 46                       同Metadata: ObjectId 
               
  • m_indexId
    (AllocUnitId.idInd) = 256                  同Metadata:
    IndexId
  • Metadata:
    AllocUnitId =
    720575940409425九2  存款和储蓄单元的ID,sys.allocation_units.allocation_unit_id                              

  • Metadata:
    PartitionId =
    720575940393041九二   数据页所在的分区号,sys.partitions.partition_id                             

  • Metadata:
    IndexId = 0                                      
     页面包车型大巴索引号,sys.objects.object_id&sys.indexes.index_id

  • Metadata:
    ObjectId = 2775760贰柒                    
     该页面所属的对象的id,sys.objects.object_id
  • m_prevPage

    (0:0)                  该数据页的前1页面;首要用在数据页、索引页和IAM页

  • m_nextPage
    = (0:0)                
     该数据页的后一页面;首要用在数据页、索引页和IAM页

  • pminlen =
    2二一                          定长数据所占的字节数
  • m_slotCnt
    = 贰                           页面中的数据的行数
  • m_freeCnt
    = 764四                    页面中多余的上空
  • 永利皇宫登录网址 ,m_freeData
    = 54四                    从第四个字节到终极2个字节的空间字节数

  • m_reservedCnt
    = 0                   活动专门的学业释放的字节数

  • m_lsn =
    (25伍:840陆:2)                日志记录号
  • m_xactReserved
    = 0                 最新出席到m_reservedCnt领域的字节数
  • m_xdesId
    = (0:0)                    
      添加到m_reservedCnt的近年的职业id
  • m_ghostRecCnt
    = 0                 幻影数据的行数
  • m_tornBits
    = 0                      
      页的校验位依然被由数据库页面尊崇情势决定分页保养位代表

 

能够看来有二条记下,一条记下为页面类型(PageType)为十的页和一条记下为页面类型(PageType)为1的页。页面类型(PageType)十是IAM页,页面类型(PageType)壹是数据页,它的页ID是7九.

永利皇宫登录网址 2

         九陆 = 页头大小 九陆bytes       

清单陆-4 中的代码和结果呈现来自 DBCC 页的言传身教输出, 其 printopt 值为1。

永利皇宫登录网址 3

 

在大家争辩在SQL
Server里,数据页内部结构具体是哪些从前,大家来创制三个表并插入一些记下。

 

页是 八KB 的尺寸,即 8192bytes,固定 九陆bytes的深浅给页头使用,接下去是切实可行的数据以槽的点子存款和储蓄。数据记录的最大尺寸是
8060 bytes(包含 柒bytes的系统行花费),由此一条记下中您有所的最大字节数是 80五三bytes。下列的表创制语句会退步。

 

永利皇宫登录网址 4

能够应用 DBCC 页命令查看数据页的始末, 

大家来实施下列的指令:

那允许你查看数据库中其余给定页的页标题、数据行和行偏移表。

接下去正是用来存放实际多少的槽(slot),每条记下存放多个槽(slot)里。0号槽在页里具备第二条数据,1号槽具备第一条数据,就那样推算。通过下边包车型客车图形,你能够见到大家记录大小是2二四bytes,217 bytes(50+50+100+五+四+八) 的定长和7 bytes
的种类行开支。

在给定页上囤积的行数依照表结议和存款和储蓄的数量而生成。

页的结尾一有个别是行偏移数组表,我们得以用参数为一的DBCC
PAGE命令来,在输出新闻的底部拿到。

在 DBCC 页的输出中, 您能够看到此页包罗二叁行, 第三行 (由插槽0指令)
从偏移量 15八伍 (0x63一) 初阶。

永利皇宫登录网址 5

 

在页头大家来看日前页面还有764四bytes能够用,大家联合来讲明下。

缓冲区部分显得有关给定页的缓冲区的音信。

     7 * 2 =
每条记下的系统行开销 * 记录数

数据页是含有已增多到数据库表中的用户数据的布局。

1 CREATE TABLE Maxsize(
2 id         CHAR(8000) NOT NULL,
3 id1        CHAR(54) NOT NULL
4 )

 

1 DBCC TRACEON(3604)
2 DBCC PAGE(InternalStorageFormat,1,79,3)
3 GO    

唯独, 假设您想利用它, 上面是语法:

SQL
Server把多少记录存在数据页(Data
Page)里。数据记录是堆表里、聚焦索引里叶子节点的行。

行偏移量数组提示页上行的逻辑顺序。

dbcc page
命令读取数据页结构的命令DBCC Page。
该命令为非文书档案化的通令,具体如下:
  DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])
  具体参数描述如下:
  dbid 包括页面包车型大巴数据库ID
  dbname 包涵页面包车型地铁数据库的名号
  filenum 包蕴页面包车型客车文本编号
  pagenum 文件内的页面
  printopt 可选的输出选项;选取当中2个值:
  0:暗许值,输出缓冲区的标题和页面标题
  一:输出缓冲区的标题、页面标题(分别出口每1行),以及行偏移量表
  2:输出缓冲区的标题、页面题目(全部出口页面),以及行偏移量表
  3:输出缓冲区的标题、页面标题(分别出口每1行),以及行偏移量表;每1行
  后跟分别列出的它的列值
  要想看看那个输出的结果,还索要安装DBCC TRA老董N(360肆)。

页标题前面是积存表实际数据行的区域。单个数据行的最大尺寸为8060字节的行内数据。

 1 USE [InternalStorageFormat]
 2 GO
 3 
 4 IF EXISTS ( SELECT  *
 5             FROM    sysobjects
 6             WHERE   id = OBJECT_ID(N'[dbo].[Customers]')
 7                     AND OBJECTPROPERTY(id, N'IsUserTable') = 1 )
 8     DROP TABLE dbo.Customers
 9 
10 CREATE TABLE Customers
11 (
12    FirstName CHAR(50) NOT NULL,
13    LastName CHAR(50) NOT NULL,
14    Address CHAR(100) NOT NULL,
15    ZipCode CHAR(5) NOT NULL,
16    Rating INT NOT NULL,
17    ModifiedDate DATETIME NOT NULL,
18 )
19 GO
20 
21 
22 INSERT INTO dbo.Customers
23         ( FirstName ,
24           LastName ,
25           Address ,
26           ZipCode ,
27           Rating ,
28           ModifiedDate
29         )

30 VALUES  ( 'Woody' , -- FirstName - char(50)
31           'Tu' , -- LastName - char(50)
32           'ZUOQIAO YOUXI TOWN LINHAI CITY' , -- Address - char(50)
33           '0000' , -- ZipCode - char(5)
34           1 , -- Rating - int
35           '2015-05-07 10:09:51'  -- ModifiedDate - datetime
36         )
37         go 2

“偏移量表” 部分显得页面末尾的行偏移量数组的剧情。

永利皇宫登录网址 6

查阅数据页

页头相关字段的意思:

最左边的列包涵数据的 ASCII 字符表示情势。 此列中唯有字符数据是可读的,
就算恐怕会议及展览示某个别的数据。

至于数据库页类型如下所示:

网站地图xml地图