4.2.4 SQL Server数据库文件

4.2.4 SQL Server数据库文件
SQL Server将数据存储在数据文件中,将事务记录存储在事务□志文件中。如果通过 一个逻辑数据库名称将它们集合到一起,这些文件就是数据库。SQL Server数据库可以具 有多个数据文件和多个事务日志文件(虽然-个事务日志文件通常已经足够)。
当首次创建数据库时,它会有一个默认文件扩展名为.mdf的主数据文件。数据库也可 以有默认扩展名为m df的辅助数据文件。这些数据文件可以组合到一个称为文件组的逻辑 组中,第 5 章将对此进行介绍。该数据库至少有一个默认扩展文件名为.ldf的事务日志文 件。SQL Server数据库的文件扩展名并不是强制的,因此可以使用任何扩展名,但我们通 常使用默认的扩展名,因为默认扩展名可以很容易地显示出文件的用途。下列几节只描述
数据文件和事务日志文件的物理存储结构。要全面了解数据库的创建过程及如何创建和使
用文件,可参阅第5 章。

4 .2 .5 数据文件
数据库的主数据文件(.mdf)以及任何辅助数据文件(.ndf)有着相同的结构。这两种文件 用来存储数据,以及可让SQL Server有效地査找、读取、修改和添加数据到数据库的元数 据。来自表和索引的所有数据以及描述数据的元数据都组织在称为区和页的存储对象中。
1.区
区 是 SQL Server的一种文件存储结构,大小 为 64KB。区 由 8 个连续的8KB页构成。 区分为两种:混合区和统一区。混合区包含来自多个对象的页。例如,混合区可能包含来
自表A 的数据页、来 自 表 B 的索引页,还有更多来自表C 的数据贞。因为一个区中有8
个页,所 以 8 个不同的对象可以共享一个区。统一区包含8 个属于同一对象的连续页。它
们的差异如图4-1所示。
当在数据库操作期间检索数据或将数据写入磁盘时,区是数据检索的基本结构。SQL
Server总是以64KB的增量分配空间。这很好地对应了数据在内存和在NT文件系统(NTFS) 格式分区中的组织方式。但是,如前所述,SQL Server可在单个区中存储来自不同对象的 页,从而最大化存储效率。

2.页
SQL Servei* 2008数据库的所有数据和元数据都存储在页中。和区不一样,页总是存储 来自同一对象的数据。这包括来自表的行、来自索引的行以及大型对象数据。页的大小为
8KB,并且组织在64KB的区(由8 个连续的8KB页组成)中。每个页有一个96字节的标头,
它含有页的信息,例如页码、存储在页上的数据类型,页上的可用空间,以及拥有该页的
对象。SQL Server包含了一些用来存储和管理数据的不同类型的页。
数据页
数据页包含来自表的数据行。这些行不能跨页。由于有页标头和行偏移量信息,最大
的行大小被限制为8060字节。行大小由行中的列数和定义于每列上的数据类型所决定。为
了最大限度地提髙性能,表和索引行应尽可能窄些。例如,如果一个表行的宽度是4 100
字节,那每个数据页上只能存储一行,留下了近4000字节的不可用空间。从这样一种结构
的表中读取结果的话,仅检索4100字节的数据就要求读取8KB数据。效率显然太低。物
理数据页结构如图4-2所示。

对于页上的每行,每个行偏移量块都占用2 个字节的空间。为了优化存储空间,表中
的行在物理上的排列不同于它们的逻辑定义。当一行存放在数据页上时,它是用一个4 字
节的标头(它可唯一标识页中的行)来标识的。标头后面为定长数据列、一个NULL块、一
个变长块,以及物理行末尾的所有变长数据列,如图4-3所示

NULL块包含一个2 字节的块,指明行中有多少列可包含NULL;后跟一个表明可空
列是否为空的位图。NULL位图的大小为每列1位,舍入至最接近的字节数。1〜 8 个可空
列需要一个1字节的位图。9〜 16个列需要一个2 字节的位图,依此类推。
和 NULL块一样,变长块包含一个2 字节的块,指明可以有多少变长列;后跟一个表
明每个变长列的最大长度的位 图 。不同于NULL块的是,变长块位图的大小为每列2 个字
节,指向每个变长列的末尾,这样所有变长数据都可连续地存储在数据行的末尾。如果没
有列被定义为变长列,则变长块将被将略.
索引页
索引页包含来自索引的行。它们和数据页有着相同的结构及限制。
文本/图像页
当使用大型对象数据类型定义列时,SQL Server会在实际的数据行中放置一个16字节 的指针,并将大型对象数据放在单独的数据页上。这类数据包括被定义为text、ntext、image、
varchar(MAX)、nvarchar (MAX)和 varbinary (MAX)和 XML 的数据o
全局分配映射表(GAM)和辅助全局分配映射表(SGAM)页
GAM和 SGAM页是基于每个文件管理区的分配页。每个数据文件的第2 页是GAM
页,而第3 页是SGAM页。SQL Server会在必要时添加额外的GAM和 SGAM页,因为 每个GAM和 SGAM页只能跟踪63 904个区。GAM和 SGAM页构成了一个表明区是统一
区的还是混合区的位图。GAM和 SGAM位图也会指出区是满的、空的,或是还有可用数
据页。
页可用空间(PFS)页
PFS页记录每一页的状态、页是否已被分配,以及每页上的可用空间。
索引分配映射(IAM)页
IAM页包含表或者索引使用的区的信息。它包含一个对象的8 个初始页的位置信息,
以及一个表示用于该对象的区的位图。每 个 IAM 页最多可跟踪512 000个数据页。SQL
Server利用IAM和 PFS页来为数据查找和分配新页。
大容量更改映射表(BCM)页
BCM页包含自上一次事务日志备份以来被人容量操作修改的区的位置。大容量操作包

猜你喜欢

转载自www.cnblogs.com/zhouwansheng/p/9276990.html