SQLSERVER数据存储内幕
2008-11-28 10:12:31 来源:WEB开发网为了能够通过上述策略来实现为对象分配存储盘区,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 中有以下位模式设置。
通过这样的策略简化了盘区管理算法。若要分配统一盘区,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
- ››sqlserver安装和简单的使用
- ››SqlServer触发器、存储过程和函数
- ››SQLServer建立交叉表查询
- ››SqlServer强制断开数据库连接的方法
- ››SQLServer 2005 海量数据解决方案
- ››SQLServer 2008数据库查看死锁、堵塞的SQL语句
- ››SqlServer 插入多条数据
- ››SQLServer 2008 R2导出的SQL文件中没有数据
- ››数据库对象——存储过程
- ››SQLSERVER通过游标查询两个数据表共有字段名组合成...
- ››sqlserver2008实现拼音首字母和随机n位数的生成
- ››数据透视表实例之业务员与客户的一一对应关系
更多精彩
赞助商链接