数据库SQLServer如何管理区分配和可用空间

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

下面使用图示的方式给你讲解数据如何管理分区和可用空间

 

用来管理区分配情况并跟踪可用空间的 SQL Server 数据结构相对而言比较简单。这有下列好处:

  • 可用空间信息被紧密压缩,因此包含此信息的页相对较少。

    这样,可提高速度,因为它减少了检索分配信息时所需的磁盘读取量。同时还可增加分配页保留在内存中的机会并且不需要更多的读操作。

  • 大多数分配信息不是链在一起的。这就简化了对分配信息的维护。

    可以快速执行每个页的分配或释放。这将减少需要分配页或释放页的并发任务之间的争用。

管理区分配


SQL Server 使用两种类型的分配映射表来记录区的分配:

  • 全局分配映射表 (GAM)

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

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

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

根据区当前的使用情况,GAM 和 SGAM 中每个区具有以下位模式。

image

这将简化区管理算法。若要分配统一区,数据库引擎将在 GAM 中搜索为 1 的位,并将其设置为 0。若要查找具有可用页的混合区,数据库引擎将在 SGAM 中搜索为 1 的位。若要分配混合区,数据库引擎将在 GAM 中搜索为 1 的位,将其设置为 0,然后将 SGAM 中对应的位设置为 1。若要释放区,数据库引擎确保将 GAM 位设置为 1,将 SGAM 位设置为 0。实际上,数据库引擎内部使用的算法比本主题中介绍的更为复杂,因为数据库引擎在数据库中均匀分布数据。但是,由于无需管理区分配信息链,因此即使是实际算法也会被简化。

 


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

将区分配给对象后,数据库引擎将使用 PFS 页来记录区中的哪些页已分配或哪些页可用。数据库引擎必须分配新页时,将使用此信息。保留的页中的可用空间量仅用于堆和 Text/Image 页。数据库引擎必须找到一个具有可用空间的页来保存新插入的行时,使用此信息。索引不要求跟踪页的可用空间,因为插入新行的点是由索引键值设置的。

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

用于分配和管理区的页




本文转自 onesthan 51CTO博客,原文链接:http://blog.51cto.com/91xueit/1354208,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
12天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
51 10
|
1月前
|
SQL 数据库
sql server中创建数据库和表的语法
sql server中创建数据库和表的语法
18 1
|
12天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
76 6
|
12天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
1月前
|
SQL Oracle 关系型数据库
干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
11 0
|
1月前
|
前端开发 Java 数据库
HTML、sqlserver数据库和java前七章节的复习(一)
HTML、sqlserver数据库和java前七章节的复习(一)
8 0
|
1月前
|
SQL 存储 数据库
数据安全无忧,SQL Server 2014数据库定时备份解密
数据安全无忧,SQL Server 2014数据库定时备份解密
|
4天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
33 2
|
20天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
104 0
|
20天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)