SQL Server 2008存储结构之GAM、SGAM介绍

SQL Server 2008存储结构之GAM、SGAM介绍

在SQL Server 2008中,GAM和SGAM是管理数据文件中空闲页的结构。他们用于标记数据文件中哪些页面是可用的或者是已被使用的。下面是GAM和SGAM的详细介绍。

GAM:全局分配映像

GAM是SQL Server 2008中的一个元数据结构,用于管理数据文件中的空闲页面,它是一个位图结构的数组,每一个比特位代表数据文件中对应偏移量的页面是否已用,0表示未用,1表示已用。

GAM主要用于管理大于或等于8个页面的空闲空间。如果一个连续的空闲空间大于或等于8个页面,它们中的每一个页面的GAM位都会被设置为1。

以下是一个示例说明,假设有一个8个页面大小的连续空闲空间,它的偏移量是100,那么GAM数组中,偏移量为100至107的8个比特位都会被设置为1,从而表明这个连续的8个页面已经被使用。

SGAM:共享全局分配映像

SGAM也是一个元数据结构,它也是一个位图结构的数组,每一个比特位代表数据文件中对应偏移量的页面空闲情况。但与GAM不同的是,SGAM仅管理大小小于8个页面的连续空闲空间。

SGAM用于管理小于8个页面的空闲空间。如果一个连续的空闲空间小于8页,但大于或等于2个页面,SGAM会将其中第一个页面的SGAM位设置为1。这意味着该页面附近的剩余页面也可能是空闲的。

以下是一个示例说明,假设有一个6个页面大小的连续空闲空间,它的偏移量是200,那么SGAM数组中,偏移量为200至201的2个比特位都会被设置为1,因为虽然该空间大小小于8个页面,但是它可以与相邻的页面组成连续的8个页面空间。

总结

在SQL Server 2008中,GAM和SGAM是用于管理数据文件中空闲页的结构,他们用于标记数据文件中哪些页面是可用的或者是已被使用的。GAM主要用于管理大于或等于8个页面的空闲空间,SGAM则用于管理小于8页的空闲空间。

以上是“SQL Server 2008存储结构之GAM、SGAM介绍”的攻略,希望对您有所帮助。

附上示例代码:

设置GAM位

DBCC TRACEON (3604) --用于跟踪DBCC PAGE输出 

DBCC PAGE ('AdventureWorks', 1, 144, 3) --分析在文件ID为1中的第144号页面 

--从输出数据中可以发现已经设置了GAM 

设置SGAM位

DBCC TRACEON (3604)  

DBCC PAGE ('AdventureWorks', 1, 146, 3)  

--从输出数据中可以发现已经设置了SGAM 

以上示例代码中,通过调用DBCC PAGE命令来显示数据库文件页面的详细信息,例如页面ID、页面类型、页标识符、数据等。通过对输出数据的分析,可以确定GAM和SGAM是否已经设置。

阅读剩余 17%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL Server 2008存储结构之GAM、SGAM介绍 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 电脑老是自动重启的原因以及解决方法

    电脑老是自动重启的原因以及解决方法 原因 电脑自动重启通常是因为出现系统错误或蓝屏而导致的。当系统检测到遇到无法处理的错误时,为了保护计算机硬件和数据安全,自动重启是一种安全机制。在这种情况下,计算机会显示一个蓝色的屏幕,通常称为“蓝屏死机”或“蓝屏错误”。 常见的引起电脑自动重启的原因包括: 软件问题: 安装了不兼容的或已经过时的软件可能导致系统错误,从而…

    other 2023年6月27日
    00
  • C++利用链表模板类实现简易队列

    首先我们需要了解链表和模板类,然后才能进一步学习如何利用链表模板类实现队列。 链表 链表是一种非常常用的数据结构,它通过“链”把一系列节点串在一起。每个节点包含一个存储数据的值和一个指向下一个节点的指针。链表可以分为单向链表和双向链表,其中单向链表中只能指向下一个节点,而双向链表中可以同时指向上一个和下一个节点。 下面是一个用C++实现单向链表的示例代码: …

    other 2023年6月27日
    00
  • c++ 深入理解归并排序的用法

    C++深入理解归并排序的用法 什么是归并排序 归并排序是一种经典的分治算法,它将一个大问题分解成小问题来解决。通过不断将两个已排好序的子序列合并成一个更大的已排好序的序列,最终达到整个序列有序的目的。由于采用了分治思想,时间复杂度为 O(NlogN),是一种比较高效的排序算法。 归并排序的实现 关键思想 归并排序的核心思想是分治。我们将待排序的序列分成两半,…

    other 2023年6月27日
    00
  • 如何将Linux命令设置成键盘快捷键?

    如何将Linux命令设置成键盘快捷键 在Linux系统中,你可以通过设置键盘快捷键来执行常用的命令,提高工作效率。下面是设置Linux命令为键盘快捷键的完整攻略。 步骤一:创建自定义脚本 首先,你需要创建一个自定义的脚本文件,用于执行你想要设置为快捷键的Linux命令。你可以使用任何文本编辑器创建一个新的文件,比如custom_script.sh。 示例脚本…

    other 2023年8月18日
    00
  • oracle客户端安装及下载地址

    Oracle客户端安装及下载地址 Oracle客户端是连接Oracle数据库的必要组件,它集成了一系列工具,包括SQL Plus命令行工具、Oracle SQL Developer GUI工具、ODBC驱动程序等。本篇文章将介绍Oracle客户端的安装步骤以及下载地址。 下载Oracle客户端 在下载Oracle客户端之前,需要先确定所需版本号。如果要连接O…

    其他 2023年3月28日
    00
  • JQuery Ajax如何实现注册检测用户名

    使用jQuery Ajax可以通过异步的方式向服务器发送请求,接收响应并且更新页面内容,实现无刷新操作。下面是实现注册检测用户名的完整攻略: 前端页面设计 在前端页面的输入框中,添加一个监听事件。当用户名输入框失去焦点时,发送异步请求检测用户名是否可用,并实时提示用户。 <input type="text" id="use…

    other 2023年6月27日
    00
  • Linux 下 安装jdk 1.7

    Linux 下 安装JDK 1.7 在 Linux 下安装 JDK 1.7 通常需要经过以下步骤: 1. 下载 JDK 1.7 JDK 1.7 的安装文件可以在 Oracle 官网下载,也可以在其他可信的第三方网站下载,建议选择官方网站进行下载以确保文件的安全性。 2. 解压 JDK 1.7 下载完成后,需要将文件解压至指定文件夹中。解压方式为执行以下命令:…

    其他 2023年3月28日
    00
  • 批处理入门与提高

    批处理入门与提高完整攻略 什么是批处理? 批处理是一种批量处理计算机操作的方式。它可以自动化重复性任务,提高工作效率。 如何写批处理脚本? 使用记事本或其他文本编辑器编写批处理脚本,文件扩展名为”.bat”或”.cmd”。以下是一个简单的批处理脚本示例: @echo off echo Hello World! pause 运行效果为,在命令行中输入脚本名称,…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部