完整word版SQLServer的物理数据库结构详解文档格式.docx

上传人:b****6 文档编号:20219943 上传时间:2023-01-20 格式:DOCX 页数:62 大小:41.73KB
下载 相关 举报
完整word版SQLServer的物理数据库结构详解文档格式.docx_第1页
第1页 / 共62页
完整word版SQLServer的物理数据库结构详解文档格式.docx_第2页
第2页 / 共62页
完整word版SQLServer的物理数据库结构详解文档格式.docx_第3页
第3页 / 共62页
完整word版SQLServer的物理数据库结构详解文档格式.docx_第4页
第4页 / 共62页
完整word版SQLServer的物理数据库结构详解文档格式.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

完整word版SQLServer的物理数据库结构详解文档格式.docx

《完整word版SQLServer的物理数据库结构详解文档格式.docx》由会员分享,可在线阅读,更多相关《完整word版SQLServer的物理数据库结构详解文档格式.docx(62页珍藏版)》请在冰豆网上搜索。

完整word版SQLServer的物理数据库结构详解文档格式.docx

PageFreeSpace有关页分配和页的可用空间的信息。

IndexAllocation有关每个分配单元中表或索引所使用的区的信

Map息。

有关每个分配单元中自最后一条BACKUP

BulkChangedMapLOG语句之后的大容量操作所修改的区的信息。

Differential有关每个分配单元中自最后一条BACKUP

ChangedMapDATABASE语句之后更改的区的信息。

注意:

日志文件不包含页,而是包含一系列日志记录。

在数据页上,数据行紧接着标头按顺序放置。

页的末尾是行偏移表,对

于页中的每一行,每个行偏移表都包含一个条目。

每个条目记录对应行的第一个字节与页首的距离。

行偏移表中的条目的顺序与页中行的顺序相反。

大型行支持

在SQLServer2005中,行不能跨页,但是行的部分可以移出行所

在的页,因此行实际可能非常大。

页的单个行中的最大数据量和开销是

8,060字节(8KB)。

但是,这不包括用Text/Image页类型存储的数据。

在SQLServer2005中,包含varchar、nvarchar、

varbinary

列的表不受此限制的约束。

当表中的所有

固定列和可变列的行的总大小超过限制的

8,060

字节时,

SQL

Server将从最大长度的列开始动态将一个或多个可变长度列移动到

ROW_OVERFLOW_DATA分配单元中的页。

每当插入或更新操作将

行的总大小增大到超过限制的8,060字节时,将会执行此操作。

将列

移动到ROW_OVERFLOW_DATA分配单元中的页后,将在

IN_ROW_DATA分配单元中的原始页上维护24字节的指针。

如果

后续操作减小了行的大小,SQLServer会动态将列移回到原始数据

页。

有关详细信息,请参阅行溢出数据超过8KB。

区是管理空间的基本单位。

一个区是八个物理上连续的页(即64KB)。

这意味着SQLServer数据库中每MB有16个区。

为了使空间分配更有效,SQLServer不会将所有区分配给包含少量数据的表。

SQLServer有两种类型的区:

统一区,由单个对象所有。

区中的所有8页只能由所属对象使用。

混合区,最多可由八个对象共享。

区中八页的每页可由不同的对象所有。

通常从混合区向新表或索引分配页。

当表或索引增长到8页时,将变成使用统一区进行后续分配。

如果对现有表创建索引,并且该表包含的行足以在索引中生成8页,则对该索引的所有分配都使用统一区进行。

SQLServer2005将数据库映射为一组操作系统文件。

数据和日

志信息从不混合在相同的文件中,而且各文件仅在一个数据库中使用。

文件组是命名的文件集合,用于帮助数据布局和管理任务,例如备份和

还原操作。

数据库文件

SQLServer2005数据库具有三种类型的文件:

主数据文件

主数据文件是数据库的起点,指向数据库中的其他文件。

每个数据库

都有一个主数据文件。

主数据文件的推荐文件扩展名是.mdf。

次要数据文件

除主数据文件以外的所有其他数据文件都是次要数据文件。

某些数据库可能不含有任何次要数据文件,而有些数据库则含有多个次要数据文件。

次要数据文件的推荐文件扩展名是.ndf。

日志文件

日志文件包含着用于恢复数据库的所有日志信息。

每个数据库必须至

少有一个日志文件,当然也可以有多个。

日志文件的推荐文件扩展名

是.ldf。

SQLServer2005不强制使用.mdf、.ndf和.ldf文件扩展名,

但使用它们有助于标识文件的各种类型和用途。

在SQLServer2005中,数据库中所有文件的位置都记录在数据库的主文件和master数据库中。

大多数情况下,数据库引擎使用

master数据库中的文件位置信息。

但是,在以下情况中,数据库引擎

使用主文件中的文件位置信息来初始化master数据库中的文件位置项:

使用带有FORATTACH或FORATTACH_REBUILD_LOG

选项的CREATEDATABASE语句来附加数据库时。

从SQLServer2000版或7.0版升级到SQLServer2005

时。

还原master数据库时。

逻辑和物理文件名称

SQLServer2005文件有两个名称:

logical_file_name:

logical_file_name是在所有Transact-SQL

语句中引用物理文件时所使用的名称。

逻辑文件名必须符合SQL

Server标识符规则,而且在数据库中的逻辑文件名中必须是唯一的。

os_file_name:

os_file_name是包括目录路径的物理文件名。

必须符合操作系统文件命名规则。

下图显示了在默认SQLServer2005辑文件名和物理文件名示例:

实例上创建的数据库的逻

SQLServer数据和日志文件可以保存在FAT或NTFS文件系

统中。

从安全性角度建议使用NTFS。

可读/写数据文件组和日志文件

不能保存在NTFS压缩文件系统中。

只有只读数据库和只读次要文件

组可以保存在NTFS压缩文件系统中。

有关详细信息,请参阅只读文

件组。

如果多个SQLServer实例在一台计算机上运行,则每个实例都会接收到不同的默认目录来保存在该实例中创建的数据库文件。

有关详细信

息,请参阅SQLServer2005的默认实例和命名实例的文件位置。

数据文件页

SQLServer2005数据文件中的页按顺序编号,文件的首页以0

开始。

数据库中的每个文件都有一个唯一的文件ID号。

若要唯一标识数据库中的页,需要同时使用文件ID和页码。

下例显示了包含4-MB主数据文件和1-MB次要数据文件的数据库中的页码。

每个文件的第一页是一个包含有关文件属性信息的文件的页首页。

在文件开始处的其他几页也包含系统信息(例如分配映射)。

有一个存储在主数据文件和第一个日志文件中的系统页是包含数据库属性信息的数据库引导页。

有关页和页类型的详细信息,请参阅页和区。

文件大小

SQLServer2005文件可以从它们最初指定的大小开始自动增长。

在定义文件时,您可以指定一个特定的增量。

每次填充文件时,其大小均按此增量来增长。

如果文件组中有多个文件,则它们在所有文件被填满之前不会自动增长。

填满后,这些文件会循环增长。

每个文件还可以指定一个最大大小。

如果没有指定最大大小,文件可以

一直增长到用完磁盘上的所有可用空间。

如果SQLServer作为数据库嵌入某应用程序,而该应用程序的用户无法迅速与系统管理员联系,

则此功能就特别有用。

用户可以使文件根据需要自动增长,以减轻监视数据库中的可用空间和手动分配额外空间的管理负担。

数据库文件组

为便于分配和管理,可以将数据库对象和文件一起分成文件组。

有两种类型的文件组:

主文件组

主文件组包含主数据文件和任何没有明确分配给其他文件组的其他文件。

系统表的所有页均分配在主文件组中。

用户定义文件组

用户定义文件组是通过在CREATEDATABASE或ALTERDATABASE语句中使用FILEGROUP关键字指定的任何文件组。

日志文件不包括在文件组内。

日志空间与数据空间分开管理。

一个文件不可以是多个文件组的成员。

表、索引和大型对象数据可以与

指定的文件组相关联。

在这种情况下,它们的所有页将被分配到该文件

组,或者对表和索引进行分区。

已分区表和索引的数据被分割为单元,

每个单元可以放置在数据库中的单独文件组中。

有关已分区表和索引的

详细信息,请参阅已分区表和已分区索引。

每个数据库中均有一个文件组被指定为默认文件组。

如果创建表或索引时未指定文件组,则将假定所有页都从默认文件组分配。

一次只能有一个文件组作为默认文件组。

db_owner固定数据库角色成员可以将默认文件组从一个文件组切换到另一个。

如果没有指定默认文件组,则将主文件组作为默认文件组。

文件和文件组示例

以下示例在SQLServer实例上创建了一个数据库。

该数据库包括一个主数据文件、一个用户定义文件组和一个日志文件。

主数据文件在主

文件组中,而用户定义文件组包含两个次要数据文件。

ALTERDATABASE语句将用户定义文件组指定为默认文件组。

然后通过指定用户定义文件组来创建表。

复制代码

USEmaster;

GO

--Createthedatabasewiththedefaultdata

--filegroupandalogfile.Specifythe

--growthincrementandthemaxsizeforthe

--primarydatafile.

CREATEDATABASEMyDB

ONPRIMARY

(NAME='

MyDB_Primary'

FILENAME=

'

c:

\ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\data\MyDB_Prm.mdf'

SIZE=4MB,

MAXSIZE=10MB,

FILEGROWTH=1MB),

FILEGROUPMyDB_FG1

(NAME='

MyDB_FG1_Dat1'

FILENAME=

\ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\data\MyDB_FG1_1.ndf'

SIZE=1MB,

MyDB_FG1_Dat2'

\ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\data\MyDB_FG1_2.ndf'

FILEGROWTH=1MB)

LOGON

MyDB_log'

\ProgramFiles\MicrosoftSQL

Server\MSSQL.1\MSSQL\data\MyDB.ldf'

SIZE=1MB,

FILEGROWTH=1MB);

ALTERDATABASEMyDB

MODIFYFILEGROUPMyDB_FG1DEFAULT;

GO

--Createatableintheuser-definedfilegroup.USEMyDB;

CREATETABLEMyTable(colaintPRIMARYKEY,

colbchar(8))

ONMyDB_FG1;

下图总结上述示例的结果。

SQLServer2005在为对象快速分配页及重新使用通过删除的行获

得的空间上很有效。

这些操作是系统的内部操作,使用用户不可见的数据结构。

但SQLServer消息中偶尔还会引用这些进程和结构。

本部分概括介绍空间分配算法和数据结构。

它还为用户和管理员提供所需的相关知识,以便他们了解SQLServer生成的消息中所引用的术语。

本节的相关信息

主题说明

管理区分配说明如何在SQLServer中分配和管理区以及如何管理

和可用空间数据库中的可用空间。

管理对象使

说明如何将数据库中的数据库对象映射到页和区。

用的空间

跟踪已修改介绍用于跟踪修改的扩展盘区的差异更改映射表

的区(DCM)和大容量更改映射表(BCM)的结构。

请参阅

用来管理区分配情况并跟踪可用空间的SQLServer2005数据结构

相对而言比较简单。

这有下列好处:

可用空间信息被紧密压缩,因此包含此信息的页相对较少。

这样,可提高速度,因为它减少了检索分配信息时所需的磁盘读取量。

同时还可增加分配页保留在内存中的机会并且不需要更多的读操作。

大多数分配信息不是链在一起的。

这就简化了对分配信息的维护。

可以快速执行每个页的分配或释放。

这将减少需要分配页或释放页的并发任务之间的争用。

管理区分配

SQLServer使用两种类型的分配映射表来记录区的分配:

全局分配映射表(GAM)

GAM页记录已分配的区。

每个GAM包含64,000个区,相当于

近4GB的数据。

GAM用一个位来表示所涵盖区间内的每个区的状态。

如果位为1,则区可用;

如果位为0,则区已分配。

共享全局分配映射表(SGAM)

SGAM页记录当前用作混合区且至少有一个未使用的页的区。

每个SGAM包含64,000个区,相当于近4GB的数据。

SGAM用一

个位来表示所涵盖区间内的每个区的状态。

如果位为1,则区正用作混合区且有可用页。

如果位为0,则区未用作混合区,或者虽然用作混合区但其所有页均在使用中。

根据区当前的使用情况,GAM和SGAM中每个区具有以下位模式。

区的当前使用情况

GAM位设置

SGAM位设置

可用,未使用

1

统一区或已满的混合区

具有可用页的混合区

这将简化区管理算法。

若要分配统一区,数据库引擎将在GAM中搜

索为1的位,并将其设置为0。

若要查找具有可用页的混合区,数据

库引擎将在SGAM中搜索为1的位。

若要分配混合区,数据库引

擎将在

GAM

中搜索为

1的位,将其设置为

0,然后将

SGAM

对应的位设置为

1。

若要释放区,数据库引擎

确保将

位设置为

1,将SGAM位设置为0。

实际上,数据库引擎内部使用的算法比本

主题中介绍的更为复杂,因为数据库引擎在数据库中均匀分布数据。

但是,由于无需管理区分配信息链,因此即使是实际算法也会被简化。

跟踪可用空间

页可用空间(PFS)页记录每页的分配状态,是否已分配单个页以及每

页的可用空间量。

PFS对每页都有一个字节,记录该页是否已分配。

如果已分配,则记录该页是为空、已满

1%到50%、已满51%

80%、已满81%到95%还是已满96%

到100%。

将区分配给对象后,数据库引擎将使用PFS页来记录区中的哪些页已

分配或哪些页可用。

数据库引擎

必须分配新页时,将使用此信息。

留的页中的可用空间量仅用于堆和

数据库引擎必须

找到一个具有可用空间的页来保存新插入的行时,

使用此信息。

索引不

要求跟踪页的可用空间,因为插入新行的点是由索引键值设置的。

在数据文件中,PFS页是文件头页之后的第一页(页码为1)。

接着是GAM页(页码为2),然后是SGAM页(页码为3)。

第一个PFS页之后是一个大小大约为8,000页的PFS页。

在第2页上,第一个GAM页之后是一个有64,000个区的GAM页;

在第3页上,

第一个SGAM页之后是一个有64,000个区的SGAM页。

下图显示了数据库引擎分配和管理区所用的页的顺序。

索引分配映射(IAM)页映射分配单元使用的数据库文件的

4GB

分中的区。

分配单元有下列三种类型:

IN_ROW_DATA

用于存储堆分区或索引分区。

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分配单元。

有关分配单元的详细信息,请

参阅表组织和索引组织。

一个IAM页在文件中的范围为

4GB,与GAM或SGAM

页的范围

相同。

如果分配单元包含来自多个文件的区,或者超过一个文件的

4

GB范围,那么一个IAM链中将链接多个

IAM页。

因此,每个分配

单元在有区的每个文件中至少有一个

IAM

如果分配给分配单元的

文件中的区的范围超过了一个

页能够记录的范围,一个文件中也

可能会有多个IAM页。

IAM页根据需要分配给每个分配单元,在文件中的位置也是随机的。

系统视图(sys.system_internals_allocation_units)指向分配单元的第一个IAM页。

该分配单元的所有IAM页都链接到一个链中。

重要事项:

sys.system_internals_allocation_units系统视图仅供内部使用,

随时可能更改。

不保证兼容性。

IAM页有一个标头,指明IAM页所映射的区范围的起始区。

IAM页中还有一个大位图,其中每个位代表一个区。

位图中的第一个位代表范围内的第一个区,第二个位代表第二个区,依此类推。

如果某个位是0,

它所代表的区将不会分配给拥有该IAM页的分配单元。

如果这个位是1,它所代表的区将被分配给拥有该IAM页的分配单元。

当数据库引擎需要插入新行,而当前页中没有可用空间时,它将使用

IAM和PFS页查找要分配的页,或者(对于堆或

Text/Image页)

查找具有足够空间容纳该行的页。

使用IAM页查找分配

给分配单元的区。

对于每个区,数据库引擎将搜索PFS页,以查看是

否有可用的页。

每个

和PFS页覆盖大量数据页,因此一个数据

库内只有很少的IAM

PFS页。

这意味着

和PFS页通常位

于内存中的SQLServer

缓冲池中,所以能够很快找到它们。

对于索

引,新行的插入点由索引键设置。

在这种情况下,不会出现上述搜索过程。

只有当数据库引擎无法在现有区内快速找到具有足够空间容纳要插入

的行的页时,才会为分配单元分配一个新区。

数据库引擎使用比例分

配算法从文件组的可用区中分配区。

如果文件组内有两个文件,而一个

文件的可用空间是另一个文件的两倍,那么每从后一个文件分配一页,

就从前一个文件分配两页。

这意味着文件组内的每个文件应该有近似的

空间使用百分比。

SQLServer2005使用两个内部数据结构跟踪被大容量复制操作修

改的区,以及自上次完整备份后修改的区。

这些数据结构极大地加快了

差异备份的速度。

当数据库使用大容量日志恢复模式时,这些数据结构

也可以加快将大容量复制操作记录至日志的速度。

与全局分配图(GAM)

和共享全局分配图(SGAM)页相同,这些结构也是位图,其中的每一

位代表一个单独的区。

差异更改映射表(DCM)

这样便可以跟踪自上次执行BACKUPDATABASE语句后更改过

的区。

如果扩展盘区的位是1,则自上次执行BACKUPDATABASE

语句后扩展盘区已被修改。

如果位是0,则扩展盘区没有被修改

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1