sql-server – SET STATISTICS IO-工作表/工作文件

前端之家收集整理的这篇文章主要介绍了sql-server – SET STATISTICS IO-工作表/工作文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是执行查询,产生计划:

统计IO:

Table 'Worktable'. Scan count 0,logical reads 0,physical reads 0,read-ahead reads 0,lob logical reads 0,lob physical reads 0,lob read-ahead reads 0.
Table 'Workfile'. Scan count 128,logical reads 5952,physical reads 576,read-ahead reads 6080,lob read-ahead reads 0.
Table 'Table1'. Scan count 9,logical reads 90450,lob read-ahead reads 0.

所以,有些问题

1.为什么统计IO显示比Profiler更高的读数?

对于KB314648,如果Profiler报告的数字高于Statistics IO,则可以.但是Profiler在描述的查询显示了92283次读取,执行相同.这是否意味着Profiler不计算工作文件/工作表读取?

2.“工作台”和“工作文件”有什么区别

我有found

>工作文件可用于存储散列连接和散列聚合的临时结果.
>工作表可用于存储查询假脱机,lob变量,XML变量和游标的临时结果.

它们之间是否存在某些物理差异?

3.为什么在这种特殊情况下会有“工作台”?

如果有0个逻辑读取,为什么我有工作表呢?它包含在统计IO中只是因为可能需要它(如果估计不好)?

technet上找到的描述看起来很模糊..

4. Workfile上的“物理读取”是什么意思?

这是否意味着没有足够的内存授予查询,因此在执行查询时必须将数据写入磁盘(哈希匹配上的黄色警告)?
我可以假设每当我在Statistics IO中看到带有物理读取的工作表/工作文件时,就没有足够的内存授予查询,并且一些中间查询结果必须写入tempdb磁盘?
每当我只看到逻辑读取时,就会使用RAM?

5.一个“工作文件”是指一个用于一个目的的表?

如果有一个工作文件/工作表,那么我不知道它使用了什么操作?

解决方法

1.为什么统计IO显示比Profiler更高的读数?

不知道,对不起.通常存在差异,因为它们正在测量知识库文章中提到的不同内容.我没有关于此的其他文档.您可以通过详细的测试来推断一些事情,但实际上并不能保证您发现的版本和构建版本之间保持一致.在计算possible bugs之前,预期的行为是不一致的.

2.“工作台”和“工作文件”有什么区别

两者都是内部对象;否则它几乎就是名字所暗示的:一个工作表有一个类似于表的结构,一个工作文件就像文件一样.详细结构不可见,但可以通过检查其方法并使用调试器跟踪其执行路径来辨别某些广泛的功能.

3.为什么在这种特殊情况下会有“工作台”?

(行模式)散列操作总是需要工作表.它在内部用于将输入分配到散列分区(一个重载的术语,与表分区无关)并跟踪状态.我从未在统计输出中看到散列工作表报告除零之外的任何内容,但我从未真正研究过它.

4. Workfile上的“物理读取”是什么意思?

工作文件是散列分区溢出时使用的机制的一部分.虽然没有记录,但是当执行引擎从工作文件中检索溢出的哈希分区时,会发生物理和预读.

5.一个“工作文件”是指一个用于一个目的的表?

我记得,可能有多个实例.我不知道将特定STATISTICS IO线与特定对象或计划节点相关联.这是一个长期存在的限制. sql Server 2016中可能会对此进行更改,但我尚未测试它是否适用于内部临时对象.

最终,从工作文件和工作表的STATISTICS IO输出中学到的东西并没有那么多,你可以通过查看执行后计划中的其他信息(或通过DMV,扩展事件等)来学习.我为这个不完整的答案道歉,但这是我能提供的最好的答案.

猜你在找的MsSQL相关文章