WEB开发网
开发学院数据库MSSQL Server SQLSERVER数据存储内幕 阅读

SQLSERVER数据存储内幕

 2008-11-28 10:12:31 来源:WEB开发网   
核心提示: 为了能够通过上述策略来实现为对象分配存储盘区,SQLSERVER提供了GAM/SGAM机制来管理和维护数据文件的盘区信息,SQLSERVER数据存储内幕(3),其中:全局分配映射表 (GAM) GAM 页记录已分配的盘区,包括统一盘区和混合盘区,每个GAM 包含 64,000 个盘区,得到

为了能够通过上述策略来实现为对象分配存储盘区,SQLSERVER提供了GAM/SGAM机制来管理和维护数据文件的盘区信息。

其中:

全局分配映射表 (GAM)

GAM 页记录已分配的盘区,包括统一盘区和混合盘区。每个GAM 包含 64,000 个盘区,将近 4 GB 的数据。GAM 对所涵盖区间内的每个盘区都有一位。如果这个位是 1,则盘区未分配(可用);如果这个位是 0,则盘区已分配。

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

SGAM 页只记录混合盘区,这些盘区当前用作混合盘区而且至少有一个未使用的页。每个 SGAM 包含 64,000 个扩展盘区,将近 4 GB 的数据。SGAM 对所涵盖区间内的每个扩展盘区都有一位。如果这个位是 1,则该扩展盘区就用作混合扩展盘区且有可用的页;如果这个位是 0,则该扩展盘区不用作混合扩展盘区,或者虽然用作混合扩展盘区但其所有页都正在使用中。

根据扩展盘区的当前使用情况,每个扩展盘区在 GAM 和 SGAM 中有以下位模式设置。

SQLSERVER数据存储内幕

通过这样的策略简化了盘区管理算法。若要分配统一盘区,SQL Server 在 GAM 中搜索是 1 的位,然后将它设成 0。若要查找有可用页的混合盘区,SQL Server 在 SGAM 中搜索是 1 的位。若要分配混合盘区,SQL Server 在 GAM 中搜索是 1 的位,并将它设置为 0,然后将 SGAM 中相应的位也设置为 1。若要释放盘区,SQL Server 应确保 GAM 位设置为 1 而且 SGAM 位设置为 0。SQL Server 内部实际使用的算法比这里叙述的算法要复杂(SQL Server 在数据库中均匀分布数据),,但道理大致如此。

五:查看实际的数据页面信息

数据存储相关的知识大致如上所述,理论性较强,但我们可以通过未公开的DBCC命令,直接查看某个数据页面的内容,得到直观上的数据存储信息。

具体是通过使用DBCC命令:DBCC PAGE.

简单的使用例子如下:

//查看数据页面的内容的方法

--打开查看数据页面的开关

dbcc traceon(3604) //打开跟踪标记

dbcc Page(northwind,1,100,1) //打开northwind数据库,第101个页面的信息

本文出自 “我儿子真帅!” 博客,请务必保留此出处http://alligator.blog.51cto.com/36993/79685

上一页  1 2 3 

Tags:SQLSERVER 数据 存储

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接