1.2 区的分配方式

1.2  区的分配方式


1.2.1 数据页

  SQL Server 有以下 4 种类型的数据页,用于保存数据。

(1)行内数据页

  此类数据页用于保存 IN_ROW_DATA 页。


(2)索引页

  索引页用于保存索引数据。


(3)文本/图像页

  这种类型的页用于保存文本数据类型(text 或 ntext)和图像数据类型(image)的 LOB_DATA 和 ROW_OVERFLOW 页。


(4)索引分配映射(Index Allocation Map,缩写为 IAM)页

  IAM 页用于保存一个表或索引使用的区的信息。IAM 页类似于 Windows 的文件分配表,它按照数据页的顺序存放数据页的指针。每一个 IAM 页大约可以记录 512,000 个数据页(约 4GB),SQL Server还可以增加更多的 IAM 页,从而记录更多的数据页。

  如果表和索引使用分区功能,则每个分区的每个物理文件都会有自己的 IAM 页。而且 IAM 页只能记录一种类型的数据页。例如,某个数据库拥有4个分区,每个分区都有2个小于4GB的物理文件,每个分区都同时存储了3种类型的数据页(行内数据、行溢出数据和LOB),则该数据库将有24个 IAM 页面。

  当向一个空表插入一条新记录时,至少会产生两个页,第一页是数据页,第二页是 IAM 页。sys.Sytem_internals_allocation_units 表存放第一个数据页和第一个 IAM 页的指针。

wKiom1XI0hWhLCyQAACzkre9MwQ161.jpg




1.2.2  空间页

  SQL Server 有以下 4 种类型的空间页,用于记录区的空间分配信息。

(1)PFS页

  PFS(Page Free Space,即页可用空间)页用于记录每页的分配状态。将区分配给对象后,数据库引擎使用PFS页来记录区中的哪些页已分配或哪些页可用。PFS 对每页都有一个字节,记录该页的空间分配情况,连续8个字节则对应一个区。

使用说明
0 保留,始终为0
1 该页是否已分配
2 该页是否属于一个混合区
3 该页是否是一个 IAM 页
4 该页是否包含幻影或已删除记录
5~7 取值为0~4分别代表空间使用率为:空、已满 1% 到 50%、已满 51% 到 80%、已满 81% 到 95% 还是已满 96% 到 100%


  对于每个 PFS 页,除去头文件等,有8088字节可用,因此每个 PFS 页可以管理和跟踪8088个页,约 64MB。PFS 页总是出现任何数据库文件的第2个页面(Page ID=1),这个页面之后,每隔8088个页面就会再出现一次。


(2)GAM 页和 SGAM 页

  GAM(Global Allocation Map,即全局分配映射) 页记录了可以分配给任何用途的区。GAM对它所涵盖的每个区都有一个位(bit),以0表示正在使用中,以1表示可用。

  SGAM(Shared GAM,即共享全局分配映射)页记录了用作混合区的区,并且这些区中至少有一个未使用的页。结构与GAM类似,每个区都有一个位,以1表示是混合区并且可用,以0表示没有用作混合区或页面都已被使用。

  如果SQL Server需要找到新的、完全未使用的区,它可以从GAM页中找到值为1的位。

  如果SQL Server需要找到包含可用空间的混合区(有一个或多个可用的页面),则它在SGAM中寻找值为1 的位。如果没有找到具有可用的页的混合区,SQL Server会使用GAM页找到一个全新的区,将它分配为混合区,然后使用其中一个页。如果根本没有可用的区,说明文件已经满了。

GAM数据位 SGAM数据位 区的使用情况
1 0 未被使用,可以用于任何用途的区
0 0 统一区,或已全部使用的混合区
0 1 至少含有一个未使用页的混合区


  对于每个GAM页或SGAM页,除去头文件等,有8000字节(64000位)可用,因此每个GAM页或SGAM页可以涵盖约64000个区,即4GB。GAM页总是出现任何数据库文件的第3个页面(Page ID=2),这个页面之后,每隔511230个页面就会有一个GAM页。SGAM页总是紧跟在GAM页后面的那个页面(Page ID=3)。

  当对表进行Drop或Truncate时,将释放该表所占用的所有区(将GAM位设置为1,将SGAM位设置为0),这样会使事务日志记录最小。


(3)DCM 页

  DCM(Differential Changed Map,即差异变更映射)页用于记录哪些区在上一次执行数据库完整备份以后又被修改过。这样在下一次差异备份时就只需对发生变更的区进行备份即可。

  DCM页总是出现任何数据库文件的第7个页面(Page ID=6),这个页面之后,每隔511230个页面就会有一个DCM页。


(4)BCM 页

  BCM(Bulk Changed Map,即批量变更映射)页用于记录哪些区在上一次执行事务日志备份以后又被bulk 操作修改过。

  BCM页总是出现任何数据库文件的第8个页面(Page ID=7),这个页面之后,每隔511230个页面就会有一个BCM页。

wKioL1XI6kaAbkurAAC2E8NxZu4180.jpg



本文出自 “SQL Server 管理员指南” 博客,谢绝转载!

你可能感兴趣的:(sql,管理)