SQL Server页类型汇总+疑问汇总
SQL Server数据存储:页类型介绍
SQL Server的数据存储基础是页。这些页是数据存储和检索的基本单位,每种页类型都有其特定的用途和存储结构。
在SQL Server中,每个数据文件都是由大量的8KB页组成的。每页有8192bytes的存储空间,其中96bytes用于页头,剩下的空间用于存储实际的数据。数据在页中的存储位置可以通过页尾的数据行偏移数组,也就是“页槽”数组来确定。这个数组像是一个书橱的目录,指示哪行数据占据了哪个槽位。并且,为了更有效地利用页空间,页尾数组的写入顺序是倒序的。
SQL Server中的页类型多种多样,共有14种,每种类型都有其特定的用途和存储机制。
类型1是数据页,用于存储堆中的数据页或聚集索引中的“叶子”页。这些页在数据文件中的位置是随机的。
类型2是索引页,用于非聚集索引的非“叶子”级或聚集索引。它们在数据文件中的位置也是随机的。
类型3是文本混合页,用于存储较短长度的LOB数据类型。这类页可以存储多种类型和多行数据,它们在数据文件中的位置也是随机的。
类型4是文本页,专门用于存储单个LOB行,位置随机。
类型5是排序页,主要用于排序操作时的临时存储,常见于TempDB中,也在用户数据进行“ONLINE”操作时可见,如联机创建索引时。
类型6是全球分配映射页(GAM Page),它记录已分配的非共享(混合)区是否已被使用。每个区占用一个bit位,第一个GAM页总是存储在每个数据文件的特定PageID上。
类型7是共享全局分配映射页(SGAM Page),它记录每一个共享(混合)区是否已被使用。每个区也有一个bit位记录,第一个SGAM页也存储在特定PageID上。
类型8是索引分配映射页(IAM Page),它记录GAM页之间堆表或者索引的区分配情况。
类型9是空闲空间跟踪页(PFS Page),它跟踪页的可用空间,帮助数据库引擎更有效地管理存储空间。
第一部分:数据库页类型简介
在数据库的架构中,每一类特定信息都存储于特定的页面类型上。这些页面分散在各个数据库文件中,并可通过特定的标识符进行识别。让我们深入了解一下这些页面类型及其功能。
对于“启动页”(Boot Page),它是每个数据库文件的起点,存储了文件的基础信息。这个页面位于每个数据库文件的特定位置,其PageID通常为1。
接下来是“服务配置页”(Server Configuration Page),它存储了系统配置的一部分信息。这个页面仅存在于主数据库中,其文件ID为1,PageID为特定的数值。这类页面为数据库的管理和配置提供了关键信息。
然后是“文件头页”(File Header Page),它包含文件的基础元数据,每个文件都有一个这样的页面,其PageID为固定的数值。这些页面对于理解数据库的结构和布局至关重要。
还有其他的页面类型,如差异更改映射(Differential Changed map)和大容量更改映射(Bulk Change Map)。这些页面记录了数据备份和恢复过程中的变化信息,是数据库恢复和数据同步过程中不可或缺的组成部分。它们在数据库文件中占据特定的位置,例如第一个DCM页面位于数据文件PageID为特定值的页面上。了解这些页面的位置和功能对于维护和管理数据库至关重要。
第二部分:如何查询数据库中的页类型和数量
查询数据库中的页类型和数量可以揭示数据库的性能和优化需求。使用特定的SQL查询语句,我们可以从系统动态管理视图(sys.dm_os_buffer_descriptors)中获取这些信息。这些查询能够返回数据库中各种页面类型的缓存数量。执行这些查询后,你将得到包含各种数据类型名称及其对应的数量的结果集。这些信息对于数据库管理员来说非常有价值,因为它们可以帮助识别哪些页面类型最常见以及哪些可能存在问题或需要优化。例如,“大容量更改映射”页面是否如预期那样频繁使用?通过查询结果,我们可以得到答案。值得注意的是,查询结果中的某些页面类型可能与我们在第一部分描述的有所不同,因为实际数据库中的页面布局可能因多种因素而有所不同。理解这些查询结果并将其与实际的数据库架构和操作相匹配是非常重要的。通过对数据库页面的深入了解和定期查询分析,我们可以更好地管理和优化数据库性能。介绍数据库中的m_type代码:未知的领域
我们意外发现了m_type=20的存在!这个神秘的代码究竟隐藏着什么秘密呢?在我对Google的全面搜索之后,仍未找到关于m_type=20的确切记录。
参考[
当我们深入研究m_type=17时,我们发现它关联到ML map page,这是一个在大容量日志模式下工作的数据类型。它记录了自上次备份以来哪些区域被更改过。特别的是,这种页面的位置总是在每个文件的第7页。当我们在查询时遇到PageType为ML_MAP_PAGE的记录时,我们能够通过特定的SQL查询追踪到pageID的记录。
当我们试图理解m_type=20时,我们遇到了挑战。这是那个传说中的第一页总是出现在每个文件第7页的“混蛋”吗?我们将PageID7带入DBCC PAGE进行。结果令人惊讶,原来这个m_type竟然是17!我对原本的理解产生了误解,原来BCM,大容量更改映射(Bulk Change Map)在数据库缓存中的PageType竟然是ML_MAP_PAGE,也就是Minimally-Logged Page。
那么,那个让人困惑的m_type=20究竟代表什么呢?BULK_OPERATION_PAGE是什么?这个神秘的代码让我忍不住想要更多。或许它是数据库在执行大容量操作时使用的特定页面?或许它与数据的批量更改有关?这个谜团仍然有待揭示。
而关于UNLINKED_REORG_PAGE,我的猜测是,它应该是数据库的排序页。当数据库需要进行数据排序操作时,可能会使用这个页面。但这个也只是我的猜测,确切的功能还需要进一步的研究和验证。
数据库的深处隐藏着许多未知的秘密,每一次的都是一次新的冒险。让我们继续揭开这些神秘的面纱,深入了解数据库的工作原理。
平面设计师
- SQL Server页类型汇总+疑问汇总
- vue.js移动端app实战1:初始配置详解
- Vue.js做select下拉列表的实例(ul-li标签仿select标签
- 解决Jquery下拉框数据动态获取的问题
- YII2框架实现表单中上传单个文件的方法示例
- jquery 实现输入邮箱时自动补全下拉提示功能
- vue.js template模板的使用(仿饿了么布局)
- 详解.net core日记记录
- ASP.NET MVC SSO单点登录设计与实现代码
- 基于.net standard 的动态编译实现代码
- 详解JavaScript中基于原型prototype的继承特性
- Angular之toDoList的实现代码示例
- jQuery完成表单验证的实例代码(纯代码)
- nodejs+mongodb+vue前后台配置ueditor的示例代码
- 深入理解正则表达式语法知识
- 微信小游戏之使用three.js 绘制一个旋转的三角形