首页 SQL Server的物理数据库结构

SQL Server的物理数据库结构

举报
开通vip

SQL Server的物理数据库结构SQL Server的物理数据库结构 SQL Server 中数据存储的基本单位是页。为数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n 连续编号)。磁盘 I/O 操作在页级执行。也就是说,SQL Server 读取或写入所有数据页。 区是八个物理上连续的页的集合,用来有效地管理页。所有页都存储在区中。 页 在 SQL Server 中,页的大小为 8 KB。这意味着 SQL Server 数据库中每 MB 有 128 页。每页的开头是 96 字节的标头,用于存...

SQL Server的物理数据库结构
SQL Server的物理数据库结构 SQL Server 中数据存储的基本单位是页。为数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n 连续编号)。磁盘 I/O 操作在页级执行。也就是说,SQL Server 读取或写入所有数据页。 区是八个物理上连续的页的集合,用来有效地管理页。所有页都存储在区中。 页 在 SQL Server 中,页的大小为 8 KB。这意味着 SQL Server 数据库中每 MB 有 128 页。每页的开头是 96 字节的标头,用于存储有关页的系统信息。此信息包括页码、页类型、页的可用空间以及拥有该页的对象的分配单元 ID。 下 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 说明了 SQL Server 数据库的数据文件中所使用的页类型。 在数据页上,数据行紧接着标头按顺序放置。页的末尾是行偏移表,对于页中的每一行,每个行偏移表都包含一个条目。每个条目 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 对应行的第一个字节与页首的距离。行偏移表中的条目的顺序与页中行的顺序相反。 大型行支持 在 SQL Server 2005 中,行不能跨页,但是行的部分可以移出行所在的页,因此行实际可能非常大。页的单个行中的最大数据量和开销是 8,060 字节 (8 KB)。但是,这不包括用 Text/Image 页类型存储的数据。在 SQL Server 2005 中,包含 varchar、nvarchar、 varbinary 或 sql_variant 列的表不受此限制的约束。当表中的所有固定列和可变列的行的总大小超过限制的 8,060 字节时,SQL Server 将从最大长度的列开始动态将一个或多个可变长度列移动到 ROW_OVERFLOW_DATA 分配单元中的页。每当插入或更新操作将 行的总大小增大到超过限制的 8,060 字节时,将会执行此操作。将列移动到 ROW_OVERFLOW_DATA 分配单元中的页后,将在 IN_ROW_DATA 分配单元中的原始页上维护 24 字节的指针。如果后续操作减小了行的大小,SQL Server 会动态将列移回到原始数据页。有关详细信息,请参阅行溢出数据超过 8 KB。 区 区是管理空间的基本单位。一个区是八个物理上连续的页(即 64 KB)。这意味着 SQL Server 数据库中每 MB 有 16 个区。 为了使空间分配更有效,SQL Server 不会将所有区分配给包含少量数据的表。SQL Server 有两种类型的区: 统一区,由单个对象所有。区中的所有 8 页只能由所属对象使用。 混合区,最多可由八个对象共享。区中八页的每页可由不同的对象所有。 通常从混合区向新表或索引分配页。当表或索引增长到 8 页时,将变成使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成 8 页,则对该索引的所有分配都使用统一区进行。 SQL Server 2005 将数据库映射为一组操作系统文件。数据和日志信息从不混合在相同的文件中,而且各文件仅在一个数据库中使用。文件组是命名的文件集合,用于帮助数据布局和管理任务,例如备份和还原操作。 数据库文件 SQL Server 2005 数据库具有三种类型的文件: 主数据文件 主数据文件是数据库的起点,指向数据库中的其他文件。每个数据库都有一个主数据文件。主数据文件的推荐文件扩展名是 .mdf。 次要数据文件 除主数据文件以外的所有其他数据文件都是次要数据文件。某些数据库可能不含有任何次要数据文件,而有些数据库则含有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。 日志文件 日志文件包含着用于恢复数据库的所有日志信息。每个数据库必须至 少有一个日志文件,当然也可以有多个。日志文件的推荐文件扩展名是 .ldf。 SQL Server 2005 不强制使用 .mdf、.ndf 和 .ldf 文件扩展名,但使用它们有助于标识文件的各种类型和用途。 在 SQL Server 2005 中,数据库中所有文件的位置都记录在数据库的主文件和 master 数据库中。大多数情况下,数据库引擎 使用 master 数据库中的文件位 置信息。但是,在以下情况中,数据库引擎使用主文件中的文件位置信息来初始化 master 数据库中的文件位置项: 使用带有 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 选项的 CREATE DATABASE 语句来附加数据库时。 从 SQL Server 2000 版或 7.0 版升级到 SQL Server 2005 时。 还原 master 数据库时。 逻辑和物理文件名称 SQL Server 2005 文件有两个名称: logical_file_name :logical_file_name 是在所有 Transact-SQL 语句中引用物理文件时所使用的名称。逻辑文件名必须符合 SQL Server 标识符规则,而且在数据库中的逻辑文件名中必须是唯一的。 os_file_name :os_file_name 是包括 目录 工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录 路径的物理文件名。它必须符合操作系统文件命名规则。 下图显示了在默认 SQL Server 2005 实例上创建的数据库的逻辑文件名和物理文件名示例: SQL Server 数据和日志文件可以保存在 FAT 或 NTFS 文件系统中。从安全性角度建议使用 NTFS。可读/写数据文件组和日志文件不能保存在 NTFS 压缩文件系统中。只有只读数据库和只读次要文件组可以保存在 NTFS 压缩文件系统中。有关详细信息,请参阅只读文件组。 如果多个 SQL Server 实例在一台计算机上运行,则每个实例都会接收到不同的默认目录来保存在该实例中创建的数据库文件。有关详细信息,请参阅 SQL Server 2005 的默认实例和命名实例的文件位置。 数据文件页 SQL Server 2005 数据文件中的页按顺序编号,文件的首页以 0 开始。数据库中的每个文件都有一个唯一的文件 ID 号。若要唯一标识数据库中的页,需要同时使用文件 ID 和页码。下例显示了包含 4-MB 主数据文件和 1-MB 次要数据文件的数据库中的页码。 每个文件的第一页是一个包含有关文件属性信息的文件的页首页。在文件开始处的其他几页也包含系统信息(例如分配映射)。有一个存储在主数据文件和第一个日志文件中的系统页是包含数据库属性信息的数据库引导页。有关页和页类型的详细信息,请参阅页和区。 文件大小 SQL Server 2005 文件可以从它们最初指定的大小开始自动增长。在定义文件时,您可以指定一个特定的增量。每次填充文件时,其大小均按此增量来增长。如果文件组中有多个文件,则它们在所有文件被填满之前不会自动增长。填满后,这些文件会循环增长。 每个文件还可以指定一个最大大小。如果没有指定最大大小,文件可以一直增长到用完磁盘上的所有可用空间。如果 SQL Server 作为数据库嵌入某应用程序,而该应用程序的用户无法迅速与系统管理员联系,则此功能就特别有用。用户可以使文件根据需要自动增长,以减轻监视数据库中的可用空间和手动分配额外空间的管理负担。 数据库文件组 为便于分配和管理,可以将数据库对象和文件一起分成文件组。有两种类型的文件组: 主文件组 主文件组包含主数据文件和任何没有明确分配给其他文件组的其他文件。系统表的所有页均分配在主文件组中。 用户定义文件组 ALTER 用户定义文件组是通过在 CREATE DATABASE 或 DATABASE 语句中使用 FILEGROUP 关键字指定的任何文件组。 日志文件不包括在文件组内。日志空间与数据空间分开管理。 一个文件不可以是多个文件组的成员。表、索引和大型对象数据可以与指定的文件组相关联。在这种情况下,它们的所有页将被分配到该文件组,或者对表和索引进行分区。已分区表和索引的数据被分割为单元,每个单元可以放置在数据库中的单独文件组中。有关已分区表和索引的详细信息,请参阅已分区表和已分区索引。 每个数据库中均有一个文件组被指定为默认文件组。如果创建表或索引时未指定文件组,则将假定所有页都从默认文件组分配。一次只能有一个文件组作为默认文件组。db_owner 固定数据库角色成员可以将默认文件组从一个文件组切换到另一个。如果没有指定默认文件组,则将主文件组作为默认文件组。 文件和文件组示例 以下示例在 SQL Server 实例上创建了一个数据库。该数据库包括一个主数据文件、一个用户定义文件组和一个日志文件。主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件。ALTER DATABASE 语句将用户定义文件组指定为默认文件组。然后通过指定用户定义文件组来创建表。 复制代码 USE master; GO -- Create the database with the default data -- filegroup and a log file. Specify the -- growth increment and the max size for the -- primary data file. CREATE DATABASE MyDB ON PRIMARY ( NAME=‘MyDB_Primary’, FILENAME= ‘c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_Prm.mdf’, SIZE=4MB, MAXSIZE=10MB, FILEGROWTH=1MB), FILEGROUP MyDB_FG1 ( NAME = ‘MyDB_FG1_Dat1’, FILENAME = ‘c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_1.ndf’, SIZE = 1MB, MAXSIZE=10MB, FILEGROWTH=1MB), ( NAME = ‘MyDB_FG1_Dat2’, FILENAME = ‘c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_2.ndf’, SIZE = 1MB, MAXSIZE=10MB, FILEGROWTH=1MB) LOG ON ( NAME=‘MyDB_log’, FILENAME = ‘c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB.ldf’, SIZE=1MB, MAXSIZE=10MB, FILEGROWTH=1MB); GO ALTER DATABASE MyDB MODIFY 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 在为对象快速分配页及重新使用通过删除的行获得的空间上很有效。这些操作是系统的本部分概括介绍空间分配算法和数据结构。它还为用户和管理员提供所需的相关知识,以便他们了解 SQL Server 生成的消息中所引用的术语。 本节的相关信息 请参阅 用来管理区分配情况并跟踪可用空间的 SQL Server 2005 数据结构相对而言比较简单。这有下列好处: 可用空间信息被紧密压缩,因此包含此信息的页相对较少。 这样,可提高速度,因为它减少了检索分配信息时所需的磁盘读取量。同时还可增加分配页保留在大多数分配信息不是链在一起的。这就简化了对分配信息的维护。 可以快速执行每个页的分配或释放。这将减少需要分配页或释放页的并发任务之间的争用。 管理区分配 SQL Server 使用两种类型的分配映射表来记录区的分配: 全局分配映射表 (GAM) GAM 页记录已分配的区。每个 GAM 包含 64,000 个区,相当于近 4 GB 的数据。GAM 用一个位来表示所涵盖区间 根据区当前的使用情况,GAM 和 SGAM 中每个区具有以下位模式。 这将简化区管理算法。若要分配统一区,数据库引擎 将在 GAM 中搜索为 1 的位,并将其设置为 0。若要查找具有可用页的混合区,数据 库引擎 将在 SGAM 中搜索为 1 的位。若要分配混合区,数据库引擎 将在 GAM 中搜索为 1 的位,将其设置为 0,然后将 SGAM 中对应的位设置为 1。若要释放区,数据库引擎 确保将 GAM 位设置为 1,将 SGAM 位设置为 0。实际上,数据库引擎 内部使用的算法比本主 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 中介绍的更为复杂,因为数据库引擎 在数据库中均匀分布数据。但是,由于无需管理区分配信息链,因此即使是实际算法也会被简化。 跟踪可用空间 页可用空间 (PFS) 页记录每页的分配状态,是否已分配单个页以及每页的可用空间量。PFS 对每页都有一个字节,记录该页是否已分配。如果已分配,则记录该页是为空、已满 1% 到 50%、已满 51% 到 80%、已满 81% 到 95% 还是已满 96% 到 100%。 将区分配给对象后,数据库引擎 将使用 PFS 页来记录区中的哪些页已分配或哪些页可用。数据库引擎 必须分配新页时,将使用此信息。保留的页中的可用空间量仅用于堆和 Text/Image 页。数据库引擎 必须找到一个具有可用空间的页来保存新插入的行时,使用此信息。索引不要求跟踪页的可用空间,因为插入新行的点是由索引键值设置的。 在数据文件中,PFS 页是文件头页之后的第一页(页码为 1)。接着是 GAM 页(页码为 2),然后是 SGAM 页(页码为 3)。第一个 PFS 页之后是一个大小大约为 8,000 页的 PFS 页。在第 2 页上,第一个 GAM 页之后是一个有 64,000 个区的 GAM 页;在第 3 页上, 第一个 SGAM 页之后是一个有 64,000 个区的 SGAM 页。下图显示了数据库引擎分配和管理区所用的页的顺序。 索引分配映射 (IAM) 页映射分配单元使用的数据库文件的 4 GB 部分中的区。分配单元有下列三种类型: 用于存储堆分区或索引分区。 LOB_DATA 用于存储大型对象 (LOB) 数据类型,例如 xml、varbinary(max) 和 varchar(max)。 ROW_OVERFLOW_DATA 用于存储超过 8,060 字节行大小限制的 varchar、nvarchar、varbinary 或 sql_variant 列中存储的可变长度数据。 堆或索引的每个分区至少包含一个 IN_ROW_DATA 分配单元。根据堆或索引的架构,可能还包含一个 LOB_DATA 或 ROW_OVERFLOW_DATA 分配单元。有关分配单元的详细信息,请参阅表组织和索引组织。 与 GAM 或 SGAM 页的范围相同。 一个 IAM 页在文件中的范围为 4 GB, 如果分配单元包含来自多个文件的区,或者超过一个文件的 4 GB 范围,那么一个 IAM 链中将链接多个 IAM 页。因此,每个分配单元在有区的每个文件中至少有一个 IAM 页。如果分配给分配单元的文件中的区的范围超过了一个 IAM 页能够记录的范围,一个文件中也可能会有多个 IAM 页。 IAM 页根据需要分配给每个分配单元,在文件中的位置也是随机的。系统视图 (sys.system_internals_allocation_units) 指向分配单元的第一个 IAM 页。该分配单元的所有 IAM 页都链接到一个链中。 IAM 页有一个标头,指明 IAM 页所映射的区范围的起始区。IAM 页中还有一个大位图,其中每个位代表一个区。位图中的第一个位代表范围内的第一个区,第二个位代表第二个区,依此类推。如果某个位是 0,它所代表的区将不会分配给拥有该 IAM 页的分配单元。如果这个位是 1,它所代表的区将被分配给拥有该 IAM 页的分配单元。 当数据库引擎 需要插入新行,而当前页中没有可用空间时,它将使用 IAM 和 PFS 页查找要分配的页,或者(对于堆或 Text/Image 页)查找具有足够空间容纳该行的页。数据库引擎 使用 IAM 页查找分配给分配单元的区。对于每个区,数据库引擎 将搜索 PFS 页,以查看是否有可用的页。每个 IAM 和 PFS 页覆盖大量数据页,因此一个数据库内只有很少的 IAM 和 PFS 页。这意味着 IAM 和 PFS 页通常位于内存中的 SQL Server 缓冲池中,所以能够很快找到它们。对于索引,新行的插入点由索引键设置。在这种情况下,不会出现上述搜索过程。 只有当数据库引擎无法在现有区内快速找到具有足够空间容纳要插入的行的 页时,才会为分配单元分配一个新区。数据库引擎 使用比例分 配算法从文件组的可用区中分配区。如果文件组内有两个文件,而一个文件的可用空间是另一个文件的两倍,那么每从后一个文件分配一页,就从前一个文件分配两页。这意味着文件组内的每个文件应该有近似的空间使用百分比。 请参阅 SQL Server 2005 使用两个内部数据结构跟踪被大容量复制操作修改的区,以及自上次完整备份后修改的区。这些数据结构极大地加快了差异备份的速度。当数据库使用大容量日志恢复模式时,这些数据结构也可以加快将大容量复制操作记录至日志的速度。与全局分配图 (GAM) 和共享全局分配图 (SGAM) 页相同,这些结构也是位图,其中的每一位代表一个单独的区。 差异更改映射表 (DCM) 这样便可以跟踪自上次执行 BACKUP DATABASE 语句后更改过的区。如果扩展盘区的位是 1,则自上次执行 BACKUP DATABASE 语句后扩展盘区已被修改。如果位是 0,则扩展盘区没有被修改。 差异备份只读取 DCM 页便可以确定已修改的区。这样大大减少了差异备份必须扫描的页数。运行差异备份所需的时间与自上次执行 BACKUP DATABASE 语句之后修改的区数成正比,而不是与整个数据库的大小成正比。 大容量更改映射表 (BCM) 跟踪自上次执行 BACKUP LOG 语句后,被大容量日志记录操作修改的区。如果某个扩展盘区的位是 1,表明自上次执行 BACKUP LOG 语句后,该扩展盘区已经被有日志记录的大容量复制操作修改。如果位是 0,则该扩展盘区未被有日志记录的大容量复制操作修改。 尽管所有数据库中都显示 BCM 页,但只有在数据库使用大容量日志记录恢复模式时,才会与 BCM 页有关。在此恢复模式中,当执行 BACKUP LOG 时,备份进程将扫描 BCM 查找已经修改的区。然后,将那些区包括在日志备份中。如果数据库从数据库备份和一系列事务日志备份恢复,便可以恢复大容量日志记录操作。在使用简单恢复模式的数据库中,BCM 页是不相关的,因为大容量日志记录操作不记入日志。在使用完整恢复模式的数据库中,BCM 页同样不相关,因为该恢复模式将大容量日志记录操作视为有完整日志记录的操作。 DCM 页和 BCM 页的间隔与 GAM 和 SGAM 页的间隔相同,都是 64,000 个区。在物理文件中,DCM 和 BCM 页位于 GAM 和 SGAM 页之后。 请参阅 SQL Server 2005 数据库中的对象存储为 8 KB 页的集合。本节说明如何组织、存储和访问表和索引页。 本节的相关信息 请参阅 表和索引作为 8 KB 页的集合存储。本主题介绍表页和索引页的组织方式。
本文档为【SQL Server的物理数据库结构】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_219945
暂无简介~
格式:doc
大小:51KB
软件:Word
页数:0
分类:工学
上传时间:2017-12-01
浏览量:19