 
         
         
         
         
         下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQL_Server的物理数据库结构详解SQL Server中数据存储的基本单位是页。为数据库中的数据文件(.mdf 或 .ndf )分配的磁盘空间可以从逻辑上划分成页 (从 0 到 n 连续编号)。磁盘 I/O 操作在页级执行。也就是说, SQL Server 读取或写入所有数据页。区是八个物理上连续的页的集合,用来有效地管理页。 所有页都存储在区中。页在 SQL Server据库中每MB中,页的大小为 8 KB 。这意味着 SQL Server 数有 128 页。每页的开头是 96 字节的标头,用于存储有关页的系统信息。此信息包括页码、页类型、页的可用空间以及拥有该页的对象的分配单元 ID
2、 。下表说明了SQL Server数据库的数据文件中所使用的页类型。页类型内容当 text in row 设置为 ON 时,包含除 text 、ntext 、image、nvarchar(max)、Datavarchar(max)、varbinary(max)和xml数据之外的所有数据的数据行。Index索引条目。大型对象数据类型:text 、 ntext 、image 、nvarchar(max)、varchar(max)、varbinary(max)和 xml数据。Text/Image数据行超过8 KB时为可变长度数据类型列:varchar、 nvarchar、varbinary和sql_
3、variantGlobal AllocationMap 、Shared Global有关区是否分配的信息。Allocation MapPage Free Space有关页分配和页的可用空间的信息。Index Allocation有关每个分配单元中表或索引所使用的区的信Map息。有关每个分配单元中自最后一条BACKUPBulk Changed MapLOG 语句之后的大容量操作所修改的区的信息。Differential有关每个分配单元中自最后一条BACKUPChanged MapDATABASE语句之后更改的区的信息。注意:日志文件不包含页,而是包含一系列日志记录。在数据页上,数据行紧接着标头按
4、顺序放置。页的末尾是行偏移表,对于页中的每一行, 每个行偏移表都包含一个条目。 每个条目记录对应行的第一个字节与页首的距离。 行偏移表中的条目的顺序与页中行的顺序相反。大型行支持在 SQL Server 2005中,行不能跨页,但是行的部分可以移出行所在的页,因此行实际可能非常大。 页的单个行中的最大数据量和开销是8,060 字节 (8 KB) 。但是,这不包括用 Text/Image 页类型存储的数据。在 SQL Server 2005 中,包含 varchar 、nvarchar 、varbinary或sql_variant列的表不受此限制的约束。当表中的所有固定列和可变列的行的总大小超过
5、限制的8,060字节时,SQLServer将从最大长度的列开始动态将一个或多个可变长度列移动到ROW_OVERFLOW_DATA分配单元中的页。每当插入或更新操作将行的总大小增大到超过限制的8,060字节时,将会执行此操作。将列移动到 ROW_OVERFLOW_DATA分配单元中的页后,将在IN_ROW_DATA分配单元中的原始页上维护24字节的指针。如果后续操作减小了行的大小,SQL Server会动态将列移回到原始数据页。有关详细信息,请参阅行溢出数据超过8 KB 。区区是管理空间的基本单位。 一个区是八个物理上连续的页 (即 64 KB )。这意味着SQL Server数据库中每MB 有
6、 16个区。为了使空间分配更有效, SQL Server 不会将所有区分配给包含少量数据的表。 SQL Server 有两种类型的区:统一区,由单个对象所有。区中的所有 8 页只能由所属对象使用。混合区,最多可由八个对象共享。区中八页的每页可由不同的对象所有。通常从混合区向新表或索引分配页。当表或索引增长到 8 页时,将变成使用统一区进行后续分配。 如果对现有表创建索引, 并且该表包含的行足以在索引中生成 8 页,则对该索引的所有分配都使用统一区进行。SQL Server 2005将数据库映射为一组操作系统文件。数据和日志信息从不混合在相同的文件中,而且各文件仅在一个数据库中使用。文件组是命名
7、的文件集合,用于帮助数据布局和管理任务,例如备份和还原操作。数据库文件SQL Server 2005数据库具有三种类型的文件:主数据文件主数据文件是数据库的起点,指向数据库中的其他文件。 每个数据库都有一个主数据文件。主数据文件的推荐文件扩展名是.mdf。次要数据文件除主数据文件以外的所有其他数据文件都是次要数据文件。 某些数据库可能不含有任何次要数据文件, 而有些数据库则含有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf 。日志文件日志文件包含着用于恢复数据库的所有日志信息。每个数据库必须至少有一个日志文件, 当然也可以有多个。 日志文件的推荐文件扩展名是 .ldf 。SQL S
8、erver 2005不强制使用 .mdf、.ndf和 .ldf文件扩展名,但使用它们有助于标识文件的各种类型和用途。在 SQL Server 2005 中,数据库中所有文件的位置都记录在数据库的主文件和 master 数据库中。大多数情况下,数据库引擎 使用master数据库中的文件位置信息。但是,在以下情况中,数据库引擎使用主文件中的文件位置信息来初始化 master 数据库中的文件位置项:使用带有FOR ATTACH或 FOR ATTACH_REBUILD_LOG选项的CREATE DATABASE语句来附加数据库时。从 SQL Server 2000版或 7.0 版升级到 SQL Ser
9、ver 2005时。还原 master数据库时。逻辑和物理文件名称SQL Server 2005文件有两个名称:logical_file_name:logical_file_name是在所有Transact-SQL语句中引用物理文件时所使用的名称。逻辑文件名必须符合SQLServer标识符规则,而且在数据库中的逻辑文件名中必须是唯一的。os_file_name:os_file_name是包括目录路径的物理文件名。它必须符合操作系统文件命名规则。下图显示了在默认 SQL Server 2005 辑文件名和物理文件名示例:实例上创建的数据库的逻SQL Server数据和日志文件可以保存在FAT 或
10、 NTFS文件系统中。从安全性角度建议使用NTFS 。可读 / 写数据文件组和日志文件不能保存在NTFS压缩文件系统中。只有只读数据库和只读次要文件组可以保存在NTFS压缩文件系统中。有关详细信息,请参阅只读文件组。如果多个 SQL Server 实例在一台计算机上运行,则 每个实例都会接收到不同的 默认目录 来保存在该实例中创建的数据库文件 。有关详细信息,请参阅SQL Server 2005的默认实例和命名实例的文件位置。数据文件页SQL Server 2005数据文件中的 页按顺序编号 ,文件的首页以0开始。数据库中的每个文件都有一个唯一的文件 ID 号。若要唯一标识数据库中的页, 需要
11、同时使用 文件 ID 和页码 。下例显示了包含 4-MB 主数据文件和 1-MB 次要数据文件的数据库中的页码。每个文件的 第一页是一个包含有关文件属性信息的文件的页首页。在文件开始处的其他几页也包含系统信息(例如分配映射) 。有一个存储在主数据文件和第一个日志文件中的 系统页 是包含数据库属性信息的数据库引导页 。有关页和页类型的详细信息,请参阅 页和区。文件大小SQL Server 2005 文件可以从它们最初指定的大小开始自动增长。 在定义文件时,您可以指定一个特定的增量。每次填充文件时,其大小均按此增量来增长。 如果文件组中有多个文件, 则它们在所有文件被填满之前不会自动增长。填满后,
12、这些文件会循环增长。每个文件还可以指定一个最大大小。如果没有指定最大大小,文件可以一直增长到用完磁盘上的所有可用空间。如果 SQL Server 作为数据库嵌入某应用程序,而该应用程序的用户无法迅速与系统管理员联系,则此功能就特别有用。用户可以使文件根据需要自动增长, 以减轻监视数据库中的可用空间和手动分配额外空间的管理负担。数据库文件组为便于分配和管理, 可以将数据库对象和文件一起分成文件组。有两种类型的文件组:主文件组主文件组包含主数据文件和任何没有明确分配给其他文件组的其他文件。系统表的所有页均分配在主文件组中。用户定义文件组用户定义文件组是通过在 CREATE DATABASE 或 A
13、LTER DATABASE 语句中使用 FILEGROUP 关键字指定的任何文件组。日志文件不包括在文件组内。日志空间与数据空间分开管理。一个文件不可以是多个文件组的成员。表、索引和大型对象数据可以与指定的文件组相关联。在这种情况下,它们的所有页将被分配到该文件组,或者对表和索引进行分区。已分区表和索引的数据被分割为单元,每个单元可以放置在数据库中的单独文件组中。有关已分区表和索引的详细信息,请参阅 已分区表和已分区索引。每个数据库中均有一个文件组被指定为默认文件组。 如果创建表或索引时未指定文件组, 则将假定所有页都从默认文件组分配。一次只能有一个文件组作为默认文件组。 db_owner 固
14、定数据库角色成员可以将默认文件组从一个文件组切换到另一个。 如果没有指定默认文件组, 则将主文件组作为默认文件组。文件和文件组示例以下示例在 SQL Server 实例上创建了一个数据库。该数据库包括一个主数据文件、一个用户定义文件组和一个日志文件。 主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件。 ALTER DATABASE 语句将用户定义文件组指定为默认文件组。 然后通过指定用户定义文件组来创建表。复制代码USE master;GO- Create the database with the default data- filegroup and a log file. S
15、pecify the- growth increment and the max size for the- primary data file.CREATE DATABASE MyDBON PRIMARY( NAME=MyDB_Primary,FILENAME=c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_Prm.mdf,SIZE=4MB,MAXSIZE=10MB,FILEGROWTH=1MB),FILEGROUP MyDB_FG1( NAME = MyDB_FG1_Dat1,FILENAME =c:Program Files
16、Microsoft SQL ServerMSSQL.1MSSQLdataMyDB_FG1_1.ndf,SIZE = 1MB,MAXSIZE=10MB,FILEGROWTH=1MB),( NAME = MyDB_FG1_Dat2,FILENAME =c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_FG1_2.ndf,SIZE = 1MB,MAXSIZE=10MB,FILEGROWTH=1MB)LOG ON( NAME=MyDB_log,FILENAME =c:Program FilesMicrosoft SQLServerMSSQL
17、.1MSSQLdataMyDB.ldf,SIZE=1MB,MAXSIZE=10MB,FILEGROWTH=1MB);GOALTER DATABASE MyDBMODIFY FILEGROUP MyDB_FG1 DEFAULT; GO- Create a table in the user-defined filegroup. USE MyDB;CREATE TABLE MyTable ( cola int PRIMARY KEY,colb char(8) )ON MyDB_FG1;GO下图总结上述示例的结果。SQL Server 2005在为对象快速分配页及重新使用通过删除的行获得的空间上很有
18、效。 这些操作是系统的内部操作, 使用用户不可见的数据结构。但 SQL Server 消息中偶尔还会引用这些进程和结构。本部分概括介绍空间分配算法和数据结构。 它还为用户和管理员提供所需的相关知识,以便他们了解 SQL Server 生成的消息中所引用的术语。本节的相关信息主题说明管理区分配说明如何在SQL Server中分配和管理区以及如何管理和可用空间数据库中的可用空间。管理对象使说明如何将数据库中的数据库对象映射到页和区。用的空间跟踪已修改介绍用于跟踪修改的扩展盘区的差异更改映射表的区(DCM)和大容量更改映射表(BCM)的结构。请参阅用来管理区分配情况并跟踪可用空间的SQL Serve
19、r 2005数据结构相对而言比较简单。这有下列好处:可用空间信息被紧密压缩,因此包含此信息的页相对较少。这样,可提高速度,因为它减少了检索分配信息时所需的磁盘读取量。同时还可增加分配页保留在内存中的机会并且不需要更多的读操作。大多数分配信息不是链在一起的。这就简化了对分配信息的维护。可以快速执行每个页的分配或释放。 这将减少需要分配页或释放页的并发任务之间的争用。管理区分配SQL Server使用两种类型的分配映射表来记录区的分配:全局分配映射表(GAM)GAM页记录已分配的区。每个GAM包含 64,000个区,相当于近 4 GB 的数据。 GAM 用一个位来表示所涵盖区间内的每个区的状态。如
20、果位为 1 ,则区可用;如果位为 0 ,则区已分配。共享全局分配映射表(SGAM)SGAM 页记录当前用作混合区且至少有一个未使用的页的区。每个 SGAM 包含 64,000 个区,相当于近 4 GB 的数据。 SGAM 用一个位来表示所涵盖区间内的每个区的状态。如果位为 1 ,则区正用作混合区且有可用页。如果位为 0 ,则区未用作混合区,或者虽然用作混合区但其所有页均在使用中。根据区当前的使用情况,GAM和 SGAM中每个区具有以下位模式。区的当前使用情况GAM 位设置SGAM 位设置可用,未使用10统一区或已满的混合区00具有可用页的混合区01这将简化区管理算法。若要分配统一区,数据库引擎
21、将在 GAM中搜索为 1 的位,并将其设置为0。若要查找具有可用页的混合区,数据库引擎 将在 SGAM中搜索为1 的位。若要分配混合区,数据库引擎 将在GAM中搜索为1 的位,将其设置为0 ,然后将SGAM中对应的位设置为1 。若要释放区,数据库引擎确保将GAM位设置为1,将 SGAM位设置为0。实际上,数据库引擎内部使用的算法比本主题中介绍的更为复杂,因为数据库引擎在数据库中均匀分布数据。但是,由于无需管理区分配信息链,因此即使是实际算法也会被简化。跟踪可用空间页可用空间 (PFS) 页记录每页的分配状态,是否已分配单个页以及每页的可用空间量。 PFS 对每页都有一个字节,记录该页是否已分配
22、。如果已分配,则记录该页是为空、已满1% 到 50% 、已满 51%到80% 、已满 81% 到 95% 还是已满 96%到 100% 。将区分配给对象后, 数据库引擎 将使用 PFS 页来记录区中的哪些页已分配或哪些页可用。数据库引擎必须分配新页时,将使用此信息。保留的页中的可用空间量仅用于堆和Text/Image页。数据库引擎 必须找到一个具有可用空间的页来保存新插入的行时,使用此信息。索引不要求跟踪页的可用空间,因为插入新行的点是由索引键值设置的。在数据文件中, PFS 页是文件头页之后的第一页(页码为 1 )。接着是 GAM 页(页码为 2 ),然后是 SGAM 页(页码为 3 )。第
23、一个 PFS 页之后是一个大小大约为 8,000 页的 PFS 页。在第 2 页上,第一个 GAM 页之后是一个有 64,000 个区的 GAM 页;在第 3 页上,第一个 SGAM 页之后是一个有 64,000 个区的 SGAM 页。下图显示了数据库引擎分配和管理区所用的页的顺序。索引分配映射(IAM)页映射分配单元使用的数据库文件的4 GB部分中的区。分配单元有下列三种类型:IN_ROW_DATA用于存储堆分区或索引分区。LOB_DATA用于存储大型对象(LOB)数据类型,例如 xml 、varbinary(max)和 varchar(max)。ROW_OVERFLOW_DATA用于存储超
24、过8,060字节行大小限制的varchar、nvarchar、varbinary或 sql_variant列中存储的可变长度数据。堆或索引的每个分区至少包含一个IN_ROW_DATA分配单元。根据堆或索引的架构,可能还包含一个LOB_DATA或ROW_OVERFLOW_DATA分配单元。有关分配单元的详细信息,请参阅表组织和索引组织 。一个 IAM 页在文件中的范围为4 GB ,与 GAM 或 SGAM页的范围相同。如果分配单元包含来自多个文件的区,或者超过一个文件的4GB 范围,那么一个 IAM 链中将链接多个IAM 页。因此,每个分配单元在有区的每个文件中至少有一个IAM页。如果分配给分配
25、单元的文件中的区的范围超过了一个IAM页能够记录的范围, 一个文件中也可能会有多个 IAM 页。IAM页根据需要分配给每个分配单元,在文件中的位置也是随机的。系统视图 (sys.system_internals_allocation_units) 指向分配单元的第一个 IAM 页。该分配单元的所有 IAM 页都链接到一个链中。重要事项:sys.system_internals_allocation_units系统视图仅供内部使用,随时可能更改。不保证兼容性。IAM 页有一个标头,指明 IAM 页所映射的区范围的起始区。 IAM 页中还有一个大位图, 其中每个位代表一个区。 位图中的第一个位代表
26、范围内的第一个区, 第二个位代表第二个区, 依此类推。如果某个位是 0 ,它所代表的区将不会分配给拥有该 IAM 页的分配单元。 如果这个位是1,它所代表的区将被分配给拥有该 IAM 页的分配单元。当数据库引擎需要插入新行,而当前页中没有可用空间时,它将使用IAM 和 PFS 页查找要分配的页,或者(对于堆或Text/Image页)查找具有足够空间容纳该行的页。数据库引擎使用 IAM 页查找分配给分配单元的区。 对于每个区, 数据库引擎 将搜索 PFS 页,以查看是否有可用的页。每个IAM和 PFS 页覆盖大量数据页,因此一个数据库内只有很少的 IAM和PFS 页。这意味着IAM和 PFS 页
27、通常位于内存中的 SQL Server缓冲池中,所以能够很快找到它们。对于索引,新行的插入点由索引键设置。在这种情况下,不会出现上述搜索过程。只有当数据库引擎无法在现有区内快速找到具有足够空间容纳要插入的行的页时,才会为分配单元分配一个新区。数据库引擎使用比例分配算法从文件组的可用区中分配区。如果文件组内有两个文件,而一个文件的可用空间是另一个文件的两倍,那么每从后一个文件分配一页,就从前一个文件分配两页。这意味着文件组内的每个文件应该有近似的空间使用百分比。请参阅SQL Server 2005使用两个内部数据结构跟踪被大容量复制操作修改的区,以及自上次完整备份后修改的区。这些数据结构极大地加
28、快了差异备份的速度。 当数据库使用大容量日志恢复模式时,这些数据结构也可以加快将大容量复制操作记录至日志的速度。与全局分配图(GAM)和共享全局分配图(SGAM)页相同,这些结构也是位图,其中的每一位代表一个单独的区。差异更改映射表(DCM)这样便可以跟踪自上次执行BACKUP DATABASE语句后更改过的区。如果扩展盘区的位是1,则自上次执行BACKUP DATABASE语句后扩展盘区已被修改。如果位是0,则扩展盘区没有被修改。差异备份只读取 DCM 页便可以确定已修改的区。这样大大减少了差异备份必须扫描的页数。运行差异备份所需的时间与自上次执行 BACKUP DATABASE 语句之后修
29、改的区数成正比,而不是与整个数据库的大小成正比。大容量更改映射表(BCM)跟踪自上次执行 BACKUP LOG 语句后,被大容量日志记录操作修改的区。如果某个扩展盘区的位是 1,表明自上次执行 BACKUP LOG 语句后,该扩展盘区已经被有日志记录的大容量复制操作修改。如果位是 0 ,则该扩展盘区未被有日志记录的大容量复制操作修改。尽管所有数据库中都显示 BCM 页,但只有在数据库使用大容量日志记录恢复模式时,才会与 BCM 页有关。在此恢复模式中,当执行 BACKUP LOG 时,备份进程将扫描 BCM 查找已经修改的区。然后,将那些区包括在日志备份中。 如果数据库从数据库备份和一系列事务
30、日志备份恢复, 便可以恢复大容量日志记录操作。 在使用简单恢复模式的数据库中, BCM 页是不相关的,因为大容量日志记录操作不记入日志。在使用完整恢复模式的数据库中, BCM 页同样不相关,因为该恢复模式将大容量日志记录操作视为有完整日志记录的操作。DCM页和 BCM 页的间隔与GAM和 SGAM页的间隔相同,都是64,000 个区。在物理文件中, DCM 和 BCM 页位于 GAM 和 SGAM 页之后。请参阅SQL Server 2005数据库中的对象存储为8 KB页的集合。本节说明如何组织、存储和访问表和索引页。本节的相关信息主题说明表组织和索引说明如何组织表和索引页。组织说明如何将数据
31、行存储在堆中,以及如何对其进行访问堆结构和维护。说明如何将数据行存储在聚集索引中,以及如何对其进聚集索引结构行访问和维护。非聚集索引结说明如何将索引行存储在非聚集索引中,以及如何对其构进行访问和维护。请参阅表和索引作为 8 KB 页的集合存储。本主题介绍表页和索引页的组织方式。表组织下图显示了表的组织。表包含在一个或多个分区中,每个分区在一个堆或一个聚集索引结构包含数据行。堆页或聚集索引页在一个或多个分配单元中进行管理,具体的分配单元数取决于数据行中的列类型。分区在 SQL Server 2005 中,表页和索引页包含在一个或多个分区中。分区是用户定义的数据组织单元。 默认情况下,表或索引只有
32、一个分区,其中包含所有的表页或索引页。该分区驻留在单个文件组中。具有单个分区的表或索引相当于 SQL Server 早期版本中的表和索引的组织结构。当表或索引使用多个分区时, 数据将被水平分区, 以便根据指定的列将行组映射到各个分区。分区可以放在数据库中的一个或多个文件组中。对数据进行查询或更新时,表或索引将被视为单个逻辑实体。 有关详细信息,请参阅 已分区表和已分区索引 。若要查看表或索引使用的分区,请使用sys.partitions(Transact-SQL)目录视图。聚集表、堆和索引SQL Server 2005表使用下列两种方法之一来组织其分区中的数据页:聚集表是有聚集索引的表。数据行
33、基于聚集索引键按顺序存储。聚集索引按B 树索引结构实现, B 树索引结构支持基于聚集索引键值对行进行快速检索。索引中每个级别的页 (包括叶级别的数据页) 链接在一个双向链接的列表中。但是,通过使用键值来执行从一个级别到另一级别的导航。有关详细信息,请参阅 聚集索引结构 。堆是没有聚集索引的表。数据行不按任何特殊的顺序存储, 数据页也没有任何特殊的顺序。 数据页不在链接列表内链接。有关详细信息,请参阅 堆结构。索引视图与聚集表具有相同的存储结构。当堆或聚集表具有多个分区时,每个分区都有一个堆或B 树结构,其中包含该指定分区的行组。例如,如果一个聚集表有4 个分区,那么将有 4 个 B 树,每个分
34、区一个。非聚集索引非聚集索引与聚集索引有一个相似的 B 树索引结构。不同的是,非聚集索引不影响数据行的顺序。 叶级别包含索引行。 每个索引行包含非聚集键值、行定位符和任意包含性列或非键列。 定位符指向包含键值的数据行。有关详细信息,请参阅 非聚集索引结构 。XML索引可以对表中的每个 xml 列创建一个主 XML 索引和多个辅助 XML 索引。 XML 索引是 xml 数据类型列中的 XML 二进制大型对象(BLOB)的拆分和持久化的表示形式。 XML索引以内部表的形式存储。若要查看有关XML索引的信息,请使用sys.xml_indexes或ernal_tables目录视图。有关
35、 XML索引的详细信息,请参阅xml数据类型列的索引 。分配单元分配单元是堆或B 树内用于根据页类型管理数据的页集合。下表列出了用于管理表和索引中的数据的分配单元类型。分配单元类型用于管理IN_ROW_DATA包含除大型对象 (LOB) 数据以外的所有数据的数据行或索引行。LOB_DATA页的类型为Data或 Index 。以下列一种或多种数据类型存储的大型对象数据: text 、ntext 、image 、xml 、 varchar(max) 、nvarchar(max) 、varbinary(max)或 CLR 用户定义类型(CLR UDT)。页的类型为Text/Image。存储在超过8,
36、060字节行大小限制的varchar、nvarchar、varbinary或ROW_OVERFLOW_DATAsql_variant列中的可变长度数据。页的类型为Data 。有关页类型的详细信息,请参阅页和区。在堆或B 树的特定分区中,每种类型只能有一个分配单元。若要查看表或索引的分配单元信息,请使用sys.allocation_units目录视图。IN_ROW_DATA分配单元对于表(堆或聚集表)、索引或索引视图使用的每个分区,只有一个IN_ROW_DATA 分配单元,它由一个数据页集合构成。 此分配单元还包含其他页集合, 这些集合用来实现为表或视图定义的每个非聚集索引和 XML 索引。表、
37、索引或索引视图的每个分区中的页集合由sys.system_internals_allocation_units系统视图中的页指针定位。重要事项:sys.system_internals_allocation_units系统视图仅供内部使用,随时可能更改。不保证兼容性。每个表、索引和索引视图分区在sys.system_internals_allocation_units中有一行,该行由容器ID (container_id)唯一标识。容器 ID与 sys.partitions目录视图中的 partition_id 之间具有一对一的映射, 用于维护分区中存储的表、索引或索引视图数据与用来管理分区内数
38、据的分配单元之间的关系。表、索引或索引视图分区的页分配由一个IAM页链管理。sys.system_internals_allocation_units中的 first_iam_page列指向IAM页链(用于管理分配给IN_ROW_DATA分配单元中的表、索引或索引视图的空间)中的第一个IAM页。sys.partitions为表或索引中每个分区返回一行。堆在 sys.partitions中有一行,其index_id = 0。sys.system_internals_allocation_units中的first_iam_page列指向指定分区中堆数据页集合的IAM链。服务器使用IAM页查找数据页
39、集合中的页,因为这些页没有链接。表或视图的聚集索引在sys.partitions中有一行,其 index_id= 1 。sys.system_internals_allocation_units中的root_page列指向指定分区内聚集索引B 树的顶端。服务器使用索引B 树查找分区中的数据页。为表或视图创建的每个非聚集索引在行,其 index_id 1 。sys.partitions中有一sys.system_internals_allocation_units中的 root_page列指向指定分区内非聚集索引B 树的顶端。至少有一个LOB列的每个表在sys.partitions中也有一行,其
40、index_id 250。first_iam_page列指向管理LOB_DATA分配单元中的页的IAM页链。ROW_OVERFLOW_DATA分配单元对于表(堆或聚集表)、索引或索引视图使用的每个分区,都有一个ROW_OVERFLOW_DATA分配单元。 此分配单元包含零(0)页,直到 IN_ROW_DATA 分配单元中带有可变长度列( varchar 、nvarchar 、varbinary 或 sql_variant )的数据行超过 8 KB 的行大小限制。达到大小限制后, SQL Server 将把最宽的列从该行中移动到分配单元中的页中。原始页上将维护一个 ROW_OVERFLOW_DA
41、TA指向此行外数据的24字节指针。ROW_OVERFLOW_DATA分配单元中Text/Image页的管理方式与 LOB_DATA 分配单元中页的管理方式相同。即,使用 IAM 页链管理 Text/Image 页。LOB_DATA分配单元当表或索引有一个或多个LOB 数据类型时,将为每个分区分配一个LOB_DATA分配单元,以管理该数据的存储。LOB数据类型包括text、ntext、image、xml、varchar(max)、nvarchar(max)、varbinary(max)和CLR用户定义类型。分区和分配单元示例下列示例返回两个表的分区和分配单元数据:DatabaseLog,具有LO
42、B 数据但没有非聚集索引的堆;Currency,没有LOB 数据但有一个非聚集索引的聚集表。两个表都有一个分区。复制代码USE AdventureWorks;GOSELECT AS table_name,p.index_id, ASindex_name , au.type_desc AS allocation_type,au.data_pages, partition_numberFROM sys.allocation_units AS auJOIN sys.partitions AS p ON au.container_id =p.partition_idJOIN
43、sys.objectsAS o ON p.object_idJOIN sys.indexes AS i ON p.index_id = i.index_idAND i.object_id = p.object_idWHERE = NDatabaseLogOR ORDER BY , p.index_id;= o.object_id = NCurrency下面是结果集。请注意,DatabaseLog表使用所有三个分配单元类型,因为表中包含Data和 Text/Image页类型。 Currency表没有 LOB 数据,但具有管理数据页所需的分配单元。如果以后将Cu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电离辐射计量员岗前诚信考核试卷含答案
- 紫胶色素工岗前面试考核试卷含答案
- 压敏电阻器制造工岗前安全实操考核试卷含答案
- 非织造布制造工安全行为能力考核试卷含答案
- 预拌混凝土中控工操作管理竞赛考核试卷含答案
- 橡胶制品配料工岗前工作实操考核试卷含答案
- 公司商品监督员职业健康及安全技术规程
- 雷达装调工操作规范能力考核试卷含答案
- 假山工安全风险考核试卷含答案
- 化工生产现场技术员安全理论知识考核试卷含答案
- 计算机应用基础练习题库(含答案)
- 工业园保洁绿化服务投标方案(技术方案)
- 2022年全国职业院校技能大赛-机器视觉系统应用赛项规程
- “互联网+”创新应用(山东联盟)智慧树知到期末考试答案章节答案2024年山东工商学院
- JT-T-1240-2019城市公共汽电车车辆专用安全设施技术要求
- 保护性约束法使用及并发症的处理
- 代建项目管理流程
- 2024福建厦门大学党政管理人员和辅导员招聘51人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 银行员工消保培训计划
- 玻璃钢层压工艺
- 生态规划课件
 
            
评论
0/150
提交评论