《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(2)

IEC 104电力规约详细解读(一) - 报文结构、报文分类、ASDU 比如,双方可以按频率发送,比如接收8帧I帧回答一帧S帧,也可以要求接收1帧I帧就应答1帧S帧,当然也可以不要求(S帧内容示例参考例1)。所以U帧格式的控制欲第一个字节就只有6种情况,分别是0x83(TESTER确认)、0x43(TESTER命令)、0x23(STOPDT确认)、0x13(STOPDT命令)、0x0B(START确认)、0x07(START命令)ASDU(应用服务数据单元),协议原文格式最好去101协议去看看,会比较详细。遥信、遥测、遥控、遥调、总召、对时等都需要使用I格式传送。 阅读详情
《Microsoft Sql server 2008 Internals》索引目录:

《Microsoft Sql server 2008 Internals》读书笔记--目录索引

上文简要介绍了获取一个持久视图、磁盘空间冲突和使用数据库快照的替代方案,本文将关注有效处理数据库的几个方法:事实生成、使用查询处理器、批处理、读取数据页到进程和并行机制。

一个数据库可以看作一个巨大的、用所有表指示后一节点到系统目录(catalogs),而所有的系统目录指示后一节点到存储在sys.sysallocunits中的最底层的分配元数据的互联结构。这些分配元数据依次在每一个数据库的第一个页(固定在页1:16)。再加上固定地址的分配位图,如Page Free Space(PFS),Global  Allocation Map(GAM)页,完整的数据库可以被看作单个实体关系(entity-Relationship,即ER)图(diagram)。

基于此,你可以想像一个针对这些元数据的一致性检查算法,自页(1:16)和分配位图开始并逐渐地扩展到在对象和结构所处的数据库检查连接(linkage)。无论何时,某个页连接(linkage)被找到时,连接被跟踪以确信连接的是正确的页。无论何时,一个分配位图有一个被标记(作IAM页)的页,这个页被检查以确保它真的在IAM页中。这将是一个depth-first 算法。

考虑一个带有三条记录的数据页,每一个数据记录包含一个连接到两个存储在行外的8000字节的大对象(LOB),使用上面的算法,一致性检查页的序列操作如下:

1、从记录1提取包含第一个LOB列数据的页ID

2、读取页确信它上面有正确的LOB列数据

3、从记录1提取包含第二个LOB列数据的页ID

4、读取页确信它上面有正确的LOB列数据

5、如有必要,重复第1-4,直到整个结构被处理。

正如你看到的,这儿描述的算法是非常低效的。页需要时被随机读取。页可能被处理多次,页读取的自然随机性意味着I/O子系统不能被用作预读簇(read ahead)。从算法复杂性角度看,这个算法应该是O(n*n)。即n平方排序。这意味着算法将花费指数方式的时间来运行运算符增长的元素数量。在本例中,n是数据库的页数。

这不是SQL Server2008中DBCC CHECKED工作的方式,事实上,它是SQL Server2000的工作方式。一个O(n*n)算法在一个大数据库上运行是过度昂贵的。替代地,一个O(n*log(n))将提供一个近乎线性的缩放比例。

■事实生成

DBCC CHECKED从被以最可能的方式进行 一致性检查的对象中读取所有页,按照分配顺序(即它们被存储在数据文件的顺序,而不是页连接和按基本的随机顺序读取它们。

当页被尽可能地按照严格的分配顺序读取时,没有方法验证所有的立刻要被处理的页之间的相关性,因此,DBCC CHECKED必须记住关于每个页以便在后续步骤中执行相关性检查,它通过生成一个页的信息来完成这个,也就是Fact(事实)。

接着前面的例子,作为处理数据页的部分,下列事实被生成:  

◆第一条记录连接到一个LOB值的两个事实(每个事实对应一个LOB值),每个事实包含如下:
1、数据记录的页ID和Slot ID(即记录数)

2、LOB值(提取自存储在数据记录的文本根)应该被存储年处的页ID和Slot ID。

3、LOB值的文本时间戳(一个惟一的ID,被指派到LOB值)

4、组成页的对象ID,索引ID,分区ID,分配单元ID

◆第二条记录连接到一个LOB值的两个事实

◆第三条记录连接到一个LOB值的两个事实

这些事实被看作父文本事实。

当每一个包含实际LOB值的文本页被处理时,处理的部分是生成一个LOB值被遇到的事实。每个事实包含如下:

◆文本记录的页ID和Slot ID

◆LOB值的文本时间戳

◆TABLock选项被定义

◆组成页的对象ID,索引ID,分区ID,分配单元ID

这些事实被看作实际文本事实。

在后来的某个位置,事实被互相检查(即聚集Aggregation),只要有一个与每个LOB值匹配的父文本事实和实际文本事实,DBCC CHECKED辨别这个特殊的LOB值连接是否过期。

除了实际事实和父事实。还有一种类型的sibing(兄弟姐妹?这个词邀月真不知道什么意思。)事实。被用来检查索引B-Tree和描述(已经存在于索引B-Tree的每个级上的)连接列表。

对于数据库结构的不同部分,一致性检查算法采用多个事实类型和事实内容。但基本的算法是相同的。事实类型被用作:

◆采集关于对象、索引、分区、分配单元的分配统计

◆跟踪FileStream数据的事实

◆跟踪IAM表链的事实

◆跟踪针对一个特殊的GAM间隔的IAM页位图

◆跟踪数据库文件的事实

◆跟踪分区分配和所有者关系的事实

◆跟踪页分配和所有者关系的事实

◆跟踪B-Tree链接的事实

◆跟踪LOB值连接的事实

◆跟踪在Heaps中的正转发和的/已转发的记录

在生成和聚集之间,事实被存储在内存中的查询优化器用来人寿一个排序运算。有时排序折大小比查询处理器的可用内存要大得多,结果,排序"溢出"到磁盘中(其实是tempdb中),这样,在tempdb中生成物理读取写。因为每个事实本质上是一个表行,事实必定分为表列。每个Fact由5列组成:

1、ROWSET_COLUMN_FACT_KEY 事实描述的页的页ID,或FileStream文件的LSN

1、ROWSET_COLUMN_FACT_TYPE 事实类型

1、ROWSET_COLUMN_SLOT_ID 事实描述的记录SLOT ID

1、ROWSET_COLUMN_COMBINED_ID 组成页的对象,索引,分区,分配单元 IDs

1、ROWSET_COLUMN_FACT_BLOB 一个可存储任何额外数据的可变长度列

如果tempdb数据库没有足够的空间存储DBCC排序,DBCC CHECKED可能失败。此时会报8921错误!

■使用查询处理器

 DBCC CHECKED充分利用发查询处理器,使得处理事实和并行一致性检查更加容易。

用于生成事实的算法如下:

1、发布一个查询(使用SQL Server可用的语法)到查询处理器,其中包含一个指向行集的指针和自定义聚集函数的名称

2、查询处理器查询行集得到一个行,本质上调用DBCC得到一个要处理的事实

3、DBCC交还单个事实作为一个行集的行(列结果如上所述)。 如果没有可用的事实,DBCC读取一个页,完整地处理它,生成所有必需的事实。这些事实被存储在thread-local内存(first-in-first-out,FIFO,即先进先出)等待队列。单个的事实被交还给查询处理器,一个事实被从thread-local序列(带查询处理器的子请求序列)的头部(Header)返回,直到没有可用的事实。然后另一个页被读取、处理并生成事实,再次填充事实序列。

4、查询处理器在排序内存中存储事实,和tempdb数据库中的一样。

一旦所有的事实被为将要被一致性检查的对象而生成,查询处理器在其上完成排序运算,然后调用DBCC提供的自定义的聚集函数。这些事实被按事实键存储,按所有类型以外的列分组,因此,聚集例程得到正确排序的事实,以允许连续的事实被容易地匹配。

接着上面的LOB连接例子,事实被按下列顺序传回到聚集例程:

1、针对某个LOB值的实际文本事实(在数据页的记录1中的真实LOB值1)

2、针对数据页的记录1中的LOB值1的父文本事实

3、针对某个LOB值的实际文本事实(在数据页的记录1中的真实LOB值2)

4、针对数据页的记录1中的LOB值2的父文本事实

如果事实不按这个顺序,匹配事实是不可能的。除非再次记住已经看到的顺序。

聚集算法运行如下:

1、查询处理器用一个简单事实调用DBCC自定义聚集函数。 

2、事实被合并直到从查询处理器传来的某个事实不匹配已经被合并的事实。例如,前例中针对LOB值1的实际事实和父事实,下一个事实针对LOB值2,这是数据结构的不同部分。

3、一旦遇到不匹配的事实,事实的合并集被聚集以判定当前是否有错误。聚集意味着事实被检查正确的事实是否存在于它们所描述的某个数据结构片段中。例如LOB必须有一个实际事实(实际遇到的植)和一个父事实(连接到LOB值的某些索引和数据记录)。

4、如果当前发生错误,错误列表中会增加一个项,这个被生成的项使用包含在事实的聚集set中。示例错误是一个LOB值,没有一个数据或索引记录指向它。

5、事实被丢弃,而新的合并的事实集开始,自已触发的聚集的不匹配的事实。

6、DBCC代码发信号给查询处理器,将接受下一个将要合并的聚集的事实。

如下图所示:

邀月工作室

这些算法在DBCC CHECKED内部执行一个查询时开始。DBCC运行的查询如下:

DECLARE @BlobEater Varbinary(8000)

Select @BlobEater =CheckIndex(ROWSET_COLUMN_FACT_BLOB)

FROM <memory address of fact rowset>

GROUP BY ROWSET_COLUMN_FACT_KEY

>>WITH ORDER BY

ROWSET_COLUMN_FACT_KEY,

ROWSET_COLUMN_SLOT_ID,

ROWSET_COLUMN_COMBINED_ID,

ROWSET_COLUMN_FACT_BLOB

OPTION(ORDER GROUP);

查询整合查询处理器和DBCC CHECKED代码,并执行事实生成,事实排序、事实存储、事实聚集算法。查询的这部分如下:

◆@BlobEater 这是一个仿制变量,惟一的作用是(仅仅出于语法需求)使用CHECKINDEX函数的输出。

◆CheckIndex(ROWSET_COLUMN_FACT_BLOB)

这是一个DBCC CHECKED内部的自定义聚集函数,查询处理器调用它存储和分组事实,作为整个事实聚集算法的一部分。

◆<memory address of fact rowset>

这是DBCC CHECKED提供给查询处理器的OLEDB行集的内存地址。查询处理器逐行查询该行集,(包含已生成的事实)作为整个事实生成算法的一部分。

◆ROWSET_COLUMN_FACT_KEY

this triggers the aggregation in the query processor(这句不知如何翻译?)

◆>>WITH ORDER BY <column list>

这仅仅是一个提供已经排序的聚集到聚集阶(Aggregation step)的内部的语法。正如前所解释,DBCC CHECKED聚集代码基于假定:来自查询处理器的事实的聚集流的排序是强制的(即它需要在每个组内的键的排序是查询中的四个键的顺序)。

◆OPTION(ORDER GROUP)

这是一个强制流聚集的查询优化器提示。它强制查询优化器在分组列上排序而避免哈希聚集。

这个机制被用于分配一致性检查和 DBCC CHECKED的per-table一致性检查阶段。该机制也用于DBCC CHECKALLOC,DBCC CHECKTABLE,DBCC CHECKGROUP命令。

如果内部查询因为内存存储而失败,会报一个8902错误。如果内部查询因为其他原因而失败,报通用的错误8975。无论哪种情况,DBCC CHECKED终止。

  

下文将关注批处理、读取数据页到进程和并行机制。

邀月注:本文版权由邀月和优快云共同所有,转载请注明出处。
助人等于自助!   3w@live.cn

  

  

车载软件刷写工具vFlash --- 自动化接口(Automation API)应用简介 阅读详情

相关推荐

腾讯Octop:Windows本地AI助手一键安装实战指南

本地AI助手是面向普通用户在个人设备上运行大语言模型的轻量级解决方案,其核心原理在于封装模型加载、推理调度与Web交互等底层复杂性,通过预编译运行时、自适应硬件加速和图形化配置降低使用门槛。技术价值体现在免环境依赖、离线可用、开箱即用,显著提升非开发者在专利撰写、文案生成、技术文档处理等办公场景中的生产力。本文聚焦Windows平台下的腾讯Octop工具,结合qwen2-7b-instruct、phi-3-mini等主流GGUF量化模型,详解安装适配、API集成与专利辅助工作流,覆盖从零部署到工程落地的完整

weixin_29055137的博客 304

Sql中CHARINDEX用法

 写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQL SERVER中并没有像C#提供了Contains函数,不过SQL SERVER中提供了一个叫CHAEINDX的函数,顾名思义就是找到字符(char)的位置(index),既然能够知道所在的位置,当然就可以判断是否包含在其中了。 通过CHARINDEX如果能够找到对应的字符串,则返回该字符串位置,否则返回0。 ...

weixin_30878501的博客 418

Maltab GUI课程设计——网络爬虫程序(基金连涨连跌提醒)

Maltab GUI课程设计——网络爬虫程序(基金连涨连跌提醒)

果果爱腰果的博客 847

SQLSERVER DBCC命令大全

SQLSERVER DBCC命令大全 DBCC DROPCLEANBUFFERS:从缓冲池中删除所有缓存,清除缓冲区 在进行测试时,使用这个命令可以从SQLSERVER的数据缓存data cache(buffer)清除所有的测试数据,以保证测试的公正性。 需要注意的是这个命令只移走干净的缓存,不移走脏缓存。由于这个原因,在执行这个命令前,应该先执行CheckPoint,将所有脏的缓...

dingshen2767的博客 386

单细胞分析(19)—— 单细胞转录组基因集评分方法

在单细胞RNA测序(scRNA-seq)分析中,基因集评分(Gene Set Scoring)是一项关键任务,能帮助研究者识别细胞功能状态

阅读文献,记录学习笔记 2439

ENVI5.6 自动化流程:GF系列卫星影像批处理与质量优化

本文详细介绍了如何利用ENVI5.6构建针对GF-2、GF-6、GF-7系列卫星影像的自动化批处理流水线。通过配置Batch Processing工具,实现从正射校正到图像融合的全流程批量处理,并分享参数设置、质量监控与故障排查的实战经验,旨在显著提升海量遥感影像的处理效率与成果质量。

efc1234567的博客 603

SQLServer 查看索引信息

在SQLServer数据库,如果想要查看一下表的索引信息,我们一般都会用 EXEC dbo.sp_helpindex tablename 这个命令来查看 但是这个不能查看包含列和列筛选,如果想查看这两个索引信息,自己创建一个存储过程即可 这个是BDA在数据库部署的,虽然我还没有详细的看,先在这里记录一下,以后好好看看。 GO /****** Object: StoredProced...

qianxi8888的博客 4400

UE5实现建筑剖切效果

UE5实现建筑剖切效果

专注GIS开发 8458

DBCC用法

DBCC用法 DBCC是SQL Server提供的一组控制台命令,功能很强大,掌握一些必要的语句,对操作数据库有不少帮助,所以决定整理一下,发现已有不少类似的整理,减少了不少工作,归类如下: 一、DBCC 帮助类命令 * DBCC HELP('?') 查询所有的DBCC命令 * DBCC HELP('命令') 查询指定...

weixin_34402090的博客 445

MICCAI‘23 | TSegFormer:基于几何引导Transformer的口内扫描3D牙齿分割

光学口内扫描仪(IOS)在数字牙科中广泛应用于提供牙冠和牙龈的详细3D信息。准确的3D牙齿分割对于各种牙科应用至关重要,但现有方法在复杂边界处容易出错,并且在不同患者之间表现不佳。本文提出了TSegFormer,它通过多任务3D Transformer架构捕捉IOS点云中不同牙齿和牙龈之间的局部和全局依赖关系。此外,作者设计了一种基于新颖点曲率的几何引导损失,以端到端方式优化边界,避免了耗时的后处理,从而实现临床适用的分割。

小白学视觉 289

[NoC]Outstanding和Credit的概念详解

摘要:本文详细解析了计算机体系结构中outstanding和credit两个核心概念。outstanding指已发出但未完成的请求数量,通过跟踪未决事务实现并发和乱序执行,常见于AXI总线等场景;credit则是基于信用令牌的流控机制,通过控制发送速率防止接收端缓冲溢出,多用于NoC网络。二者在目的、机制上存在差异:outstanding侧重提升并发度,credit关注流控保护。文章通过AXI协议实例和SystemC代码示例展示了二者的应用与结合方式,并探讨了在SoC设计中参数优化的方法,包括性能/资源权衡

元直的博客 2280

SQL中常用的字符串CHARINDEX函数和PATINDEX函数详解!

今天整理了些日常可能经常遇到的一些处理字符串的函数,有些可能在写SQL时突然间想不到如何使用,今天就给大家总结两个函数的应用方法,以备不时之需!记得点赞收藏! CHARINDEX(expression1,expression2[,start_location])函数解析: expression1 必须,要查找的子字符串 expression2 必须,父字符串 start_...

2125

RDkit入门

今天开始写RDkit的入门教程,每天学习和写一小点,相信一句话“不积跬步无以至千里,不积小流无以成江海”,所以就慢慢来,一点一滴积累叭,从最简单的开始喽希望自己每天都能保持写博客的好习惯,把自己的代码笔记就极在这里,RDkit一块啃了很久的骨头,今天终于要下定决心,好好总结一波了,希望保持这个更新的频率,每天都能有所学。............

博客而已 6682

《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(9)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引  ■ DBCC CHECKED输出DBCC CHECKED用四种方式输出信息:◆常规输出,由一个错误的信息和邮件组成的列表指向发布DBCC CHECKDB命令的连接。◆SQL Server 错误日志的一条信息◆Wind

邀月周记 3084

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

《Microsoft Sql server 2008 Internals》读书笔记--第五章Table(5)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引 前面我们学习了数据页 的存储结构以及如何检查一个data page。那么如何查询一个物理页呢?记得在上篇文章时,我们介绍了了一个未公开的DBCC PAGE命令。该命令前需要知道页的具体参数,如-- 查询testdb数据

邀月周记 2039

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

《Microsoft Sql server 2008 Internals》读书笔记--第五章Table(4)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引 上篇我们主要学习了元数据(metadata)的存储及利用目录视图来查询这些信息,今天,我们继续学习数据页(Data Pages)。 数据页(Data pages)是包含已经添加到数据库的表中的用户数据的结构。正如前面所

邀月周记 3085

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(1)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在第五章主要学习了table的内部存储结构,第七章《Special storage》中将继续深入学习存储机制,那将是本书最难理解的一章。第六章主要介绍index的基础知识,第八章是《query Optimizer》,下

邀月周记 2991

《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(1)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引当任何人提到检查一个SQL Server数据库的一致性时,头脑中的第一反应该是“DBCC”。在SQL Server 7.0中,DBCC代表数据库一致性检查,但在随后版本,SQL Server 2000中,微软改变了定义,

邀月周记 2310

Microsoft SQL Server 2008 Internals 读书笔记--目录索引

Microsoft SQL Server 2008 Internals 读书笔记--目录索引

gfuugfdkkn的博客 349

《Microsoft Sql server 2008 Internals》读书笔记--第九章Plan Caching and Recompilation(2)

《Microsoft Sql server 2008 Internals》索引目录:《Microsoft Sql server 2008 Internals》读书笔记--目录索引在这一节,我们将继续关注Adhoc和参数化■Adhoc混合负载的优化如果你的查询大多数是临时(adhoc)的,从来不会被重用,似乎浪费内存去缓存这些计划了。SQL Server 2008增加了一个配置选项在这种情况下也能

邀月周记 2690
上一篇: 《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(1)
下一篇: 幸运是偶然的吗?
downmoon
博客等级 码龄24年 1676粉丝 494原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值