位置: 编程技术 - 正文

SQL Server页类型汇总+疑问汇总(sqlserver2000分页)

编辑:rootadmin

SQL Server中包含多种不同类型的页,来满足数据存储的需求。不管是什么类型的页,它们的存储结构都是相同的。每个数据文件都包含相当数量的由8KB组成的页,即每页有bytes可用,每页都有byte用于页头的存储,剩下的空间

才用来存储实际的数据,在页的最后是数据行偏移数组,也可以叫“页槽”数组,我们可以把一个页看做是有一个个方格的书橱,哪行数据占用了哪个槽,都在页尾的位置进行标示,并且页尾数组的写入顺序是倒叙的,这样就可以有效的利用页空间。

由此可以预见,页面上的“槽”并不一定是有序存放的,当有新的ID进来,并且该ID位于该页的最大ID和最小ID之间时(假设是以ID进行排序的叶子页),那么该ID数据行则直接插入到已经存在的数据行的后面即可,当有查询需要检索该ID所在的行时,

数据库引擎从索引页找到该“叶子”页,将该页全部加载到内存中,通过页尾的行偏移数组找到对应的行。页尾数组的记录大小存储在页头里,数组里面每一个关于“页槽”的记录占用空间为2bytes。

据我所知,SQL Server数据文件共有种页类型:

类型1——数据页(Data Page):堆中的数据页聚集索引中的“叶子”页在数据文件中的位置是随机的DBCC PAGE 中m_type=1

类型2——索引页(Index Page):

非聚集索引非“叶子”级聚集索引在数据文件中的位置是随机的DBCC PAGE 中m_type=2

类型3——文本混合页(Text Mixed Page):

较短长度的LOB数据类型,多种类型,多行存储在数据文件中的位置是随机的DBCC PAGE 中m_type=3

类型4——文本页(Text Tree Page):

存储单个LOB行在数据文件中的位置是随机的DBCC PAGE 中m_type=4

类型5——排序页(Sort Page):

进行排序操作时的临时页常见于TempDB中,在用户数据中进行“ONLINE"操作时也可见(例如:联机创建索引未指定SORT_IN_TEMPDB选项时)在数据文件中的位置是随机的DBCC PAGE 中m_type=

类型6——全局分配映射页(GAM Page):

Global Allocation Map,记录已分配的非共享(混合)区是否已被使用每个区占用一个bit位,如果该值为1,说明该区可以使用,0则说明已被使用(但是并不一定存储空间已满)第一个GAM页总是存储在每个数据文件PageID为2的页上DBCC PAGE 中m_type=8

类型7——共享全局分配映射页(SGAM Page):

Shared Global Allocation Map,记录每一个共享(混合)区是否已被使用每个区占用一个bit位,如果该值为1,说明该区有空闲的存储空间,0则说明区已满第一个SGAM页总是存储在每个数据文件PageID为3的页上DBCC PAGE 中m_type=9

类型8——索引分配映射页(IAM Page):

Index Allocation Map,记录GAM页之间堆表或者索引的区分配在数据文件中的位置是随机的DBCC PAGE 中m_type=

类型9——空闲空间跟踪页(PFS Page):

Page Free Space,跟踪页的可用空间。第一个PFS页总是存储在每个数据文件PageID为1的页上DBCC PAGE 中m_type=

类型——启动页(Boot Page):

存储所在数据库范围的信息仅在每个数据库文件(file)ID为1的PageID为9的页上DBCC PAGE 中m_type=

类型——服务配置页(Server Configuration Page):

存储了sys.configurations中返回结果中的部分信息该页仅存在于master数据库的文件ID为1PageID为的页上

类型——文件头页(File Header Page):

所在文件的信息总是存在于每个文件PageID为0的页上DBCC PAGE 中m_type=

类型——差异更改映射(Differential Changed map):

记录GAM之间的每次全备或差异备份之后更改过的页面第一个DCM页面在每个数据文件PageID为6的页上DBCC PAGE 中m_type=

类型——大容量更改映射(Bulk Change Map):

记录每个GAM之间上次备份之后大容量操作的更改第一个BCM页面在每个数据文件PageID为7的页上DBCC PAGE 中m_type=

如下SQL可以查询到你当前的数据库中的缓存的页类型及数量:

SELECT CASE page_type WHEN 'DIFF_MAP_PAGE' THEN '差异更改映射(Differential Changed map)' WHEN 'TEXT_MIX_PAGE' THEN '文本混合页(Text Mixed Page)' WHEN 'ML_MAP_PAGE' THEN '这个字面意思应该是Minimally-Logged,最小化日志记录' WHEN 'INDEX_PAGE' THEN '索引页(Index Page)' WHEN 'FILEHEADER_PAGE' THEN '文件头页(File Header Page)' WHEN 'DATA_PAGE' THEN '数据页(Data Page)' WHEN 'IAM_PAGE' THEN '索引分配映射页(IAM Page)' WHEN 'GAM_PAGE' THEN '全局分配映射页(GAM Page)' WHEN 'BULK_OPERATION_PAGE' THEN '这个字面意思应该是大容量更改记录' WHEN 'TEXT_TREE_PAGE' THEN '文本页(Text Tree Page)' WHEN 'SGAM_PAGE' THEN '共享全局分配映射页(SGAM Page)' WHEN 'PFS_PAGE' THEN '空闲空间跟踪页(PFS Page)' WHEN 'BOOT_PAGE' THEN '启动页(Boot Page)' ELSE '排序页?' END , page_type , COUNT(*) cntFROM sys.dm_os_buffer_descriptors WITH ( NOLOCK )WHERE database_id = DB_ID()GROUP BY page_type

结果如下图所示:

按上面的数据类型介绍,我们很自然地认为类型——大容量更改映射(Bulk Change Map)就是图示查询结果中第行BULK_OPERATION_PAGE

但是事实是吗?我们将data_type=BULK_OPERATION_PAGE的记录查出来:

SELECT TOP *FROM sys.dm_os_buffer_descriptors WHERE page_type='BULK_OPERATION_PAGE' AND DB_ID()=database_idORDER BY database_id,FILE_ID,page_id

查询结果:

我们把查询结果中的一个PageID带入DBCC PAGE(其实这里已经看出,这个pageID并不像上面说的第一个BCM页面在每个数据文件PageID为7的页上,它们是逻辑上连续的页!

我们发现上面的m_type=!

我搜遍了google也没有找到m_type=是什么记录!

参考网址: map page,是在“大容量日志”模式下,记录自上次备份以来哪些区被更改过,该页第一个位置总是在每个文件的第7页上,我们折回上面第一个查询时的第三行,即PageType是ML_MAP_PAGE的那行,

并将其带入如下SQL查询出pageID的记录:

发现这才是传说中的那个第一页总是出现在每个文件第7页的混蛋!

我们将PageID7带入DBCC PAGE:

Oh,SHIT!这个的m_type是!

好吧,我只能说,是我曲解了人家字面的意思,原来:

BCM ,大容量更改映射(Bulk Change Map),在数据库缓存中对应的PageType竟然是ML_MAP_PAGE!Minimally-Logged Page!

而那个该死的BULK_OPERATION_PAGE(m_type=)是什么东西,谁能告诉我?

另外那个UNLINKED_REORG_PAGE,应该就是排序页吧?

推荐整理分享SQL Server页类型汇总+疑问汇总(sqlserver2000分页),希望有所帮助,仅作参考,欢迎阅读内容。

SQL Server页类型汇总+疑问汇总(sqlserver2000分页)

文章相关热门搜索词:sqlserver中一个数据页的大小是多少kb,sqlserver实现分页,sqlserver中一个数据页的大小是多少kb,sqlserver的分页,sqlserver的分页语句,sql server中一个数据页的大小,sql server页面,sql server 页的大小,内容如对您有帮助,希望把文章链接给更多的朋友!

MSSQL报错:参数数据类型 text 对于 replace 函数的参数 1 无效的解决办法 但是我们可以换一种方法解决这个问题。下面就来分析下解决办法。对text或ntext类型的数据在查询中不能进行字符串操作。这时用得最多的是把text当作v

积分获取和消费的存储过程学习示例 1.GM_JF客户账户积分表2.GM_JF_DETAIL客户账户积分消费记录3.GM_JF_ACTION_RULES积分动作规则表4.GM_JF_GOODS_RULES积分商品规则表--===============测试========================

sql多表行转列、级联行转列示例代码 现有两表A,BA表存储商品点击日志,B表存储商品要求显示当天所有商品点击量列表并附带总数并按天排序declare@sqlvarchar()set@sql='selectCONVERT(varchar(),a

标签: sqlserver2000分页

本文链接地址:https://www.jiuchutong.com/biancheng/320411.html 转载请保留说明!

上一篇:SQL Server内存遭遇操作系统进程压榨案例分析(sql server 内存管理)

下一篇:MSSQL报错:参数数据类型 text 对于 replace 函数的参数 1 无效的解决办法(数据库参数错误)

  • 商品混凝土税率为啥是3%
  • 企业所得税的纳税人发生年度亏损的时间
  • 以土地投资入股是否需要缴纳增值税
  • 销售软件税目
  • 不能抵扣的增值税进项税额是什么
  • 通货膨胀有什么危害?
  • 公司内部个人股份怎么算
  • 小规模未开票收入如何填写申报表增值税
  • 电费为什么计入成本费用
  • 同一控制下的企业合并的会计核算方法
  • 公司成立筹备工作小组主要任务是什么
  • 预付款发票未到如何入成本
  • 公司开业两周年致辞
  • 分公司代理人
  • 对公账户100万交多少税收
  • 如何知道企业是查账征收还是核定征收
  • 差额纳税的会计处理
  • 合伙人未出资能成为合伙人吗
  • 跨年补交企业所得税
  • 年数总和法折旧公式
  • 半变动成本和延期成本的区别
  • 股权激励会计处理分录和企业所得税
  • 物流公司运费的会计分录
  • 出纳备用金收支登记表怎么做
  • 个税手续费返还要交企业所得税吗
  • 营业外支出的税额要进项转出吗
  • 如何调整文件夹内文件的顺序
  • 没有抵扣的增值税怎么做账
  • 失业稳岗补贴要交社保吗
  • 期间损益的科目
  • 营业利润投资收益是借方还是贷方
  • 关于企业发生的手续费及佣金支出的扣除标准
  • php从服务器下载文件
  • framework怎么用
  • 建筑企业跨省经营
  • php连接mysql数据库的几种方式及区别
  • php流程图
  • Vue3 + Pinia 持久化存储
  • 物流公司挂靠会计处理
  • gpu版本的pytorch
  • is-l命令
  • head -1命令
  • 企业季度预缴土地出让金
  • 周转材料包装箱属于存货分类的
  • 零申报企业所得税季度申报表怎么填写
  • 建筑公司遇到的问题
  • 劳务费发票为什么必须每月开
  • 出租车票可以查到行程吗
  • 员工的生日津贴怎么发
  • 销货清单要放凭证里吗
  • 清算时应交税金如何处理
  • 汇票和本票的区别是
  • 交易性金融资产包括哪些项目
  • 收到货款就必须付货款吗
  • 会计收入的定义和分类
  • 建账的三个基本步骤
  • sqlmd5加密后解密
  • win7系统中怎么卸载安装的软件
  • windows取消ctrl+alt+del
  • wdcp的/www目录大小调整或增加分区/硬盘的方法
  • Linux下Dr.com(802.1x)拨号上网完美解决方法(Ubuntu)
  • macbook做热点
  • linux系统中cp命令
  • windows8.1界面
  • win10应用商店更新比蜗牛还慢
  • 电脑怎么连接上隐形wi
  • unity怎么念
  • opengl 绘制
  • cmd命令是干嘛的
  • Time、Set、Smartdrv命令的使用方法
  • android!
  • Android 判断是否打开了微信
  • gin项目
  • Android-Canvas.drawText()详解
  • php使用js
  • 怎么利用python处理批量表格
  • 21个JavaScript事件(Events)属性汇总
  • jquery 判断对象是否为空
  • 2021年河南省企业退休职工丧葬抚恤金标准
  • 延期申报预缴税款滞纳金问题
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设