6.2.2 数据文件的结构
数据文件的结构按照层次可以划分为分页和区。
1. 页的概念
页是SQL Server中数据存储的基本单位。为数据库中的数据文件分配的磁盘空间可以从逻辑上划分成带有连续编号的页(编号从 0开始)。磁盘I/O操作在页级执行,SQL Server 读取或写入的是所有的数据页。
页的尺寸是8KB。每页的开头是96B的页头,在页头存储页码、页类型、页中的可用空间以及拥有此页对象的ID等有关页的系统信息。
数据文件中的页有8种类型。
Data(数据):用于存储数据行的数据,但不能存储大型数据对象(LOB)。
Index(索引):用于存储索引条目。
TEXT/IMAGE(文本/图像):用于存储TEXT、NTEXT、IMAGE、NVARCHAR(max)、VARCHAR(max)、VARBINARY(max) 和 XML等类型的大型对象数据类型以及数据行大小超过8KB的可变长度数据类型(包括VARCHAR、NVARCHAR、VARBINARY和sql_variant)。
Global Allocation Map(全局分配表)和Shared Global Allocation Map(共享全局映射表):用于存储有关区是否分配的信息。
Page Free Space(页可用空间):用于存储页分配和页可用空间的信息。
Index Allocation Map(索引分配映射表):用于存储每个分配单元中表或索引所使用的区的信息。
BULK Changed Map(大容量更改映射表):用于存储最后一条BACKUP LOG语句执行之后,每个分配单元中大容量操作所修改的区的信息。
Differential Changed Map(差异更改映射表):用于存储最后一条BACKUP DATABASE 语句执行后,每个分配单元中更改的区的信息。
在SQL Server中,同一个数据行中的数据不能存储在不同的页中——即页中单个行的最大数据量不能超过8060字节(除了Text/Image中保存的数据类型外),但是一行的部分数据却可以移出行所在的页而被分开存储,当表中的所有固定列和可变列的行的总大小超过限制的8060字节时,SQL Server 将从最大长度的列开始动态地将一个或多个可变长度列移动到ROW_OVERFLOW_DATA分配单元中的页。
2. 区的概念
区是SQL Server分配给表和索引的基本单位。一个区是8个物理上连续的页(即64 KB)。区有两种类型。
统一区:统一区只能由一个单一的对象拥有,其中的8个页只能用来存储这个对象的数据。
混合区:混合区最多可以被8个对象共享,区中的8个页可以分给不同的对象。
通常情况下,应该从混合区向新表或索引分配页。当表或索引增长到8页时,将使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成8页,则对该索引的所有分配都使用统一区进行。
| 回书目 上一节 下一节 |