CHECKDB内部:什么是BlobEater?
DBCC CHECKDB注意到有关数据文件页面。一旦整个表的所有页(或一组表,如果配料已启用-看到同样的博客文章我上面提到的),所有的事实都聚集在一起,他们都应该相互抵消。当有额外的事实(在索引B树都指向同一个页面在一个较低的水平如两页),或丢失的事实(如LOB片段没有任何其他LOB片段或数据/索引记录指向它),则DBCC CHECKDB可以告诉有一个腐败。
由于DBCC CHECKDB正在生成数据库基本上是随机页面所有这些因素(它读取物理顺序表中的页面,而不是逻辑顺序),必须有前聚集可以发生的事实的一些排序。这是使用查询处理器的所有驱动。在每个线程DBCC CHECKDB读取页面,生成的事实,并让他们给查询处理器进行排序和汇总。一旦所有的阅读完毕之后,事实再返还给内部并行线程DBCC CHECKDB找出损坏是否存在。
表明这一机制的画面看起来如下:
如果你正在做的任何跟踪或分析而DBCC CHECKDB正在运行时,你会看到下面的查询:
DECLARE @BlobEater VARBINARY(8000);
选择@BlobEater = CheckIndex(ROWSET_COLUMN_FACT_BLOB)
FROM <其实行集的内存地址>
GROUP BY ROWSET_COLUMN_FACT_KEY
>>带有ORDER BY
ROWSET_COLUMN_FACT_KEY,
ROWSET_COLUMN_SLOT_ID,
ROWSET_COLUMN_COMBINED_ID,
ROWSET_COLUMN_FACT_BLOB
OPTION(ORDER GROUP);
这个查询的部分的解释里面的SQL Server 2008中记录和即将里面的SQL Server 2012的书,我已经从我的DBCC内幕章下面引用它:
该查询带来的查询处理器和DBCC CHECKDB代码一起执行事实生成,事实排序,事实存储和事实聚集算法。是查询的部分如下:
- @BlobEater这是一个没有以外的其他使用来自任何输出目的的虚拟变量CheckIndex功能(永远不应该有任何,但语法要求的话)。
- CheckIndex(ROWSET_COLUMN_FACT_BLOB)这里面自定义聚合函数DBCC CHECKDB,查询处理器排序和分组的事实为整个事实聚集算法的一部分调用。
- <其实行集的内存地址>这是OLEDB行集的内存地址DBCC CHECKDB提供给查询处理器。查询处理器查询此行集行(包含生成的事实)作为整个事实生成算法的一部分。
- GROUP BY ROWSET_COLUMN_FACT_KEY这触发了查询处理器的聚集。
- >>带有ORDER BY <字段列表>这是仅供内部使用,提供了有序的聚合,凝聚工序语法。正如我先前所解释的,DBCC CHECKDB聚合代码是基于这样的假设,从查询处理器事实的凝集流的顺序被强制(即,它要求每个组内的键的排列顺序是顺序在查询中的四个键)。
- OPTION(订单组)这是一个查询优化器暗示的力量流聚集。它迫使查询优化器进行排序分组列,避免哈希聚集。
CHECKDB内部:什么是BlobEater?的更多相关文章
- sqlserver和Oracle内部的错误数据修复(DBCC、DBMS_REPAIR)
数据库长时间运行后,因断电.操作系统.物理存储等的原因可能会造成数据库内部的逻辑或物理错误,我们可以使用一般的方式尝试修复. 对于sqlserver 我们可以使用DBCC命令: -- sqlserve ...
- 如何在大型的并且有表分区的数据库中进行DBCC CHECKDB操作
如何在大型的并且有表分区的数据库中进行DBCC CHECKDB操作 其实这个问题已经在<SQLSERVER企业级平台管理实践>里徐老师已经讲过了,不过我想用自己的语言再讲详细一些 笔记链接 ...
- 通过ProGet搭建一个内部的Nuget服务器
.NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget已经成为.NET 生态系统中不可或缺的一个组件,从项目角度,将项目中各种组件的引用统统交给NuGet,添加组件/删除组件/以 ...
- 微软Azure 经典模式下创建内部负载均衡(ILB)
微软Azure 经典模式下创建内部负载均衡(ILB) 使用之前一定要注意自己的Azure的模式,老版的为cloud service模式,新版为ARM模式(资源组模式) 本文适用于cloud servi ...
- 简单搭建 nuget 内部服务器
搭建 nuget 内部服务器,最好的方式是使用 ProGet,参考博文<用 ProGet 搭建内部的 NuGet 服务器>,好处非常多,但需要使用 SQL Server 数据库,如果不想使 ...
- 用ProGet搭建内部的NuGet服务器
最近团队内部用的一个很简陋的NuGet服务器出问题了,nuget push发包,客户端显示发布成功,服务器上就是没有.懶得再去排查这个问题,早就想换掉这个过于简陋的NuGet服务器,借此机会直接弃旧迎 ...
- topshelf和quartz内部分享
阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...
- Storm内部的消息传递机制
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 一个Storm拓扑,就是一个复杂的多阶段的流式计算.Storm中的组件 ...
- 如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
一夜之间,微信小程序刷爆了行业网站和朋友圈,小程序真的能如张小龙所说让用户"即用即走"吗? 其功能能和动辄几十兆安装文件的APP相比吗? 开发小程序,是不是意味着移动应用开发的一次 ...
随机推荐
- vue-cli 安装失败Failed to download repo vuejs-templates/webapck-simple: Response code 404 (Not Found)
新学习vue的萌新们经常会遇到各种各样的坑.例如上面这个报错.这个一般是命令行面板写错单词导致. 正确:vue init webpack-simple .(注意"."点,指当前目录 ...
- 打印杨辉三角 --JS
var arr = new Array(); for(var i = 0 ;i < 6 ; i++){ if(i == 0){arr.push(1);} else if(i == 1){arr ...
- 卡尔曼滤波(Kalman Filter)
一.引言 以下我们引用文献[1]中的一段话作为本文的開始: 想象你在黄昏时分看着一仅仅小鸟飞行穿过浓密的丛林.你仅仅能隐隐约约.断断续续地瞥见小鸟运动的闪现.你试图努力地猜測小鸟在哪里以及下一时刻它会 ...
- android面试总结01 activity生命周期
面试常常会被问到的: Q:能说一下Activity的生命周期吗? Activity生命周期例如以下: onCreat onStart onResume onPause onStop onDestory ...
- webAPP踩坑记录
最近公司突然给我们下了一个任务 一个星期要做出一个系统网站 外加手机app 2个同事负责 web开发 我负责手机app 的开发 今天终于初级版本做完了,记录一下手机app踩过的坑与优化之路 用 ...
- java反射(转)
作者:奋斗的小子链接:https://www.zhihu.com/question/24304289/answer/38218810来源:知乎著作权归作者所有,转载请联系作者获得授权. 反射之中包含了 ...
- Elasticsearch常用基础操作
1.获得集群中的节点列表: curl 'localhost:9200/_cat/nodes?v' 2.获得所有索引: curl 'localhost:9200/_cat/indices?v' 3.创建 ...
- 常见.NET功能代码汇总 (3)
33,彻底关闭Excel进程 .NET中使用Excel属于使用非托管资源,使用完成后一般都要用GC回收资源,但是,调用GC的位置不正确,Excel进程可能无法彻底关闭,如下面的代码: static v ...
- Javascript中的Microtask和Macrotask——从一道很少有人能答对的题目说起
首先我们来看一道题目,如下javascript代码,执行后会在控制台打印出什么内容? async function async1() { console.log('async1 start'); aw ...
- CentOS openssh升级至7.4版本
1.原环境: cat /etc/issue CentOS release 6.5 (Final) ssh -V OpenSSH_7.3p1, OpenSSL 1.0.1e-fips 11 Feb 20 ...