SQL Server管理页和区的数据结构(对设计和开发高效执行的数据库有帮助)

原创 2011年03月01日 14:59:00

1、全局分配映射表 (GAM)
GAM 页记录已分配的区。每个 GAM 包含 64,000 个区,相当于近 4 GB 的数据。GAM 用一个位来表示所涵盖区间内的每个区的状态。如果位为 1,则区可用;如果位为 0,则区已分配。

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

SGAM 页记录当前用作混合区且至少有一个未使用的页的区。每个 SGAM 包含 64,000 个区,相当于近 4 GB 的数据。SGAM 用一个位来表示所涵盖区间内的每个区的状态。如果位为 1,则区正用作混合区且有可用页。如果位为 0,则区未用作混合区,或者虽然用作混合区但其所有页均在使用中。 

3、页可用空间 (PFS) 

页可用空间 (PFS) 页记录每页的分配状态,是否已分配单个页以及每页的可用空间量。PFS 对每页都有一个字节,记录该页是否已分配。如果已分配,则记录该页是为空、已满 1% 到 50%、已满 51% 到 80%、已满 81% 到 95% 还是已满 96% 到 100%。

在数据文件中,PFS 页是文件头页之后的第一页(页码为 1)。接着是 GAM 页(页码为 2),然后是 SGAM 页(页码为 3)。第一个 PFS 页之后是一个大小大约为 8,000 页的 PFS 页。在第 2 页的第一个 GAM 页之后还有另一个 GAM 页(包含 64,000 个区),在第 3 页的第一个 SGAM 页之后也有另一个 SGAM 页(包含 64,000 个区)。下图显示了数据库引擎用来分配和管理区的页顺序。

 

4、“索引分配映射 (IAM)”页将映射分配单元使用的数据库文件中 4 GB 部分中的区。分配单元有下列三种类型:

  • IN_ROW_DATA

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

    用于存储大型对象 (LOB) 数据类型,例如 xmlvarbinary(max)varchar(max)
  • ROW_OVERFLOW_DATA

    用于存储超过 8,060 字节行大小限制的 varcharnvarcharvarbinarysql_variant 列中存储的可变长度数据

 

5、差异更改映射表 (DCM)
跟踪自上次执行 BACKUP DATABASE 语句后更改过的区。如果扩展盘区的位是 1,则自上次执行 BACKUP DATABASE 语句后扩展盘区已被修改。如果位是 0,则扩展盘区没有被修改。 差异备份只读取 DCM 页便可以确定已修改的区。这样大大减少了差异备份必须扫描的页数。运行差异备份所需的时间与自上次执行 BACKUP DATABASE 语句之后修改的区数成正比,而不是与整个数据库的大小成正比。 

6、大容量更改映射表 (BCM)
跟踪自上次执行 BACKUP LOG 语句后,被大容量日志记录操作修改的区。如果某个扩展盘区的位是 1,表明自上次执行 BACKUP LOG 语句后,该扩展盘区已经被有日志记录的大容量复制操作修改。如果位是 0,则该扩展盘区未被有日志记录的大容量复制操作修改。尽管所有数据库中都显示 BCM 页,但只有在数据库使用大容量日志记录恢复模式时,才会与 BCM 页有关。在此恢复模式中,当执行 BACKUP LOG 时,备份进程将扫描 BCM 查找已经修改的区。然后,将那些区包括在日志备份中。如果数据库从数据库备份和一系列事务日志备份恢复,便可以恢复大容量日志记录操作。在使用简单恢复模式的数据库中,BCM 页是不相关的,因为大容量日志记录操作不记入日志。在使用完整恢复模式的数据库中,BCM 页同样不相关,因为该恢复模式将大容量日志记录操作视为有完整日志记录的操作。

 

四种高效数据库设计思想——提高查询效率

【开篇】设计数据库表结构时,我们首先要按照数据库的三大范式进行建立数据库。 1. 1NF每列不可拆分 2. 2NF确保每个表只做一件事情 3. 3NF满足2NF,消除表中的...
  • mrlin6688
  • mrlin6688
  • 2016年12月11日 16:54
  • 1282

简单几步实现用Web客户端来管理SqlServer2008数据库

作为一个.NET开发者每次安装Visual Studio的时候我总是选择安装附带的Sql Express数据库,这货比较小巧简单用来做开发最合适了,不过默认安装的Sql Express没有管理客户端(...
  • binyao02123202
  • binyao02123202
  • 2011年11月14日 17:44
  • 1408

索引(Index)是帮助MySQL高效获取数据的数据结构。

索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。...
  • u012946553
  • u012946553
  • 2013年12月06日 17:20
  • 476

mysql源码阅读笔记 (1) 底层物理页面的数据结构

Innodb数据页结构
  • huyangyamin
  • huyangyamin
  • 2015年02月08日 17:00
  • 1424

SQL Server数据库分区分表(水平)

1         需求说明 将数据库Demo中的表按照日期字段进行水平分区分表。要求数据文件按一年一个文件存储,且分区的分割点会根据时间的增长自动添加(例如现在是2017年1月1日,将其作为一个分...
  • ExceptionalBoy
  • ExceptionalBoy
  • 2017年12月20日 11:32
  • 210

深入理解Sqlserver文件存储之页和应用

我们每天都在使用数据库,我们部门使用最多的关系数据库有Sqlserver,Oracle,有没有想过这些数据库是怎么存放到操作系统的文件中的?有时候为了能够设计出最优的表结构,写出高性能的Sqlserv...
  • ltylove2007
  • ltylove2007
  • 2014年03月12日 12:47
  • 3754

强列提供:邹建-《中文版SQL Server2000开发与管理应用实例》书的实例完全源代码下载

   强列提供:邹建-《中文版SQL Server2000开发与管理应用实例》书的实例完全源代码下载下载地址:http://www.cnblogs.com/Files/cyz1980/sqlserve...
  • cyz1980
  • cyz1980
  • 2006年09月03日 14:04
  • 3983

SQL Server数据库实现负载均衡

SQL Server数据库负载方案
  • English0523
  • English0523
  • 2017年02月10日 15:12
  • 2185

SQL查询优化——数据结构设计

数据库设计及使用是WEB开发程序员必备的一项基础技能,在大数据量和高并发场景,合理的数据结构及SQL查询优化对项目来说都会显得格外重要。大部分有经验的程序员都能了解到,程序的瓶颈往往不在程序本身,而在...
  • huyanping
  • huyanping
  • 2014年10月06日 16:51
  • 9279

[数据库分区]SQL Server分区原理

关于SQL Server分区分区方法 创建文件组 创建文件 创建分区函数 * 创建分区架构(图001)新同步一个表判断是否存在分区函数,​ 如果不是,创建分区函数​ 如果是扩展分区 if ...
  • liweijie231
  • liweijie231
  • 2017年07月11日 13:39
  • 250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server管理页和区的数据结构(对设计和开发高效执行的数据库有帮助)
举报原因:
原因补充:

(最多只允许输入30个字)