Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql统计信息io扫描计数说明_Sql_Performance_Count_Statistics_Database Scan - Fatal编程技术网

sql统计信息io扫描计数说明

sql统计信息io扫描计数说明,sql,performance,count,statistics,database-scan,Sql,Performance,Count,Statistics,Database Scan,这个问题很简单,但我在谷歌上找不到一个好的解释。使用Set Statistics IO ON时,management studio的消息窗口中会提供逻辑读取和扫描计数。如果我有: TBlexSample,扫描计数5,逻辑读取20 扫描计数意味着什么?来自联机图书 扫描计数: 执行的索引或表扫描数 逻辑读取: 从数据缓存读取的页数 物理阅读: 从磁盘读取的页数 预读内容为: 为查询放置到缓存中的页数 另请参见此处:至于“表格扫描”的含义,我能找到的最好方法是: 扫描计数只是指在查询过程中访问表或索

这个问题很简单,但我在谷歌上找不到一个好的解释。使用Set Statistics IO ON时,management studio的消息窗口中会提供逻辑读取和扫描计数。如果我有:

TBlexSample,扫描计数5,逻辑读取20

扫描计数意味着什么?

来自联机图书

扫描计数: 执行的索引或表扫描数

逻辑读取: 从数据缓存读取的页数

物理阅读: 从磁盘读取的页数

预读内容为: 为查询放置到缓存中的页数

另请参见此处:

至于“表格扫描”的含义,我能找到的最好方法是:

扫描计数只是指在查询过程中访问表或索引的次数。它可以是完全扫描、部分扫描,也可以是简单的搜索

换言之,仅扫描计数本身不足以继续进行。您需要确切地知道这些扫描是什么——因此您必须查看实际执行计划以了解更多细节。总之,它本身并不是一个非常有用的指标

此外:

不幸的是,现在的扫描计数信息量不大。嗯,嗯,, 如果你看到一个像19223这样的数字,这个表可能已经被访问了 通过嵌套循环多次联接

曾经有一段时间,“扫描计数”只是指“访问的时间表”, 但那是很久以前的事了,可能是在SQL6.5中。你唯一能得到的时间 定义为0的扫描计数具有如下查询

select *
from TestA1
where CompanyID = 1
and CompanyID = 2
。。。SQL Server可以得出查询不会返回的结论 任何行,而不访问表


如果要继续收集msdn引文。然后[1]在[2]中重复:

  • 逻辑读取
    此值表示处理查询所需的页面访问总数。每个页面都从数据缓存中读取,无论是否需要将该页面从磁盘带到缓存中进行任何给定的读取。此值始终至少与物理读取的值相同,并且通常大于物理读取的值。同一页面可以e多次读取(例如从索引驱动查询时),因此表的逻辑读取计数可能大于表中的页数

  • 物理阅读
    此值表示从磁盘读取的页数;它始终小于或等于逻辑读取的值。性能监视器显示的缓冲区缓存命中率的值根据逻辑读取和物理读取值计算,如下所示:

  • 预读读取
    Read-Ahead Reads值表示在处理查询时使用Read-Ahead机制读入缓存的页面数。这些页面不一定由查询使用。如果最终需要页面,则计算逻辑读取,但不计算物理读取。高值表示物理读取的值可能为lower和缓存命中率可能高于…[被vgv8截断]

  • 扫描计数
    扫描计数值表示访问相应表的次数。嵌套循环联接的外部表的扫描计数为1。对于内部表,扫描计数可能是“通过循环”的次数“该表已被访问。逻辑读取的数量由扫描计数与每次扫描访问的页数之和决定。但是,即使对于嵌套循环联接,内部表的扫描计数也可能显示为1。SQL Server可能会将所需的行从内部表复制到缓存中的工作表中,并使用此工作表访问实际的数据行。在计划中使用此步骤时,统计IO输出中通常没有指示此步骤。您必须使用统计时间的输出以及有关所使用的实际处理计划的信息来确定执行查询所涉及的实际工作量。哈希联接和合并联接通常将联接中涉及的两个表的扫描计数显示为1,但这些联接类型可能会涉及更多内存。您可以在执行查询时检查sysprocesss中的memusage值,但与物理io值不同,这不是累积计数器,仅对当前运行的查询有效。一旦查询完成,就无法查看它使用了多少内存。”

[1]
第4章查询性能故障排除监控查询性能
Microsoft®SQL Server内部™ 2005:查询调优和优化
卡伦·德莱尼


发行人:微软出版社
发布日期:2007年9月26日
打印ISBN-10:0-7356-2196-9
打印ISBN-13:978-0-7356-2196-1
页码:448

[2]
监视查询性能
优化查询性能
罗恩·苏库普,卡伦·德莱尼
第14章来自Microsoft SQL Server 7.0内部,由Microsoft出版社出版

这里有一个相当全面的总结


忽略扫描计数,这并不重要。重点关注如何降低逻辑读取。基于。

如果要查找唯一索引,则可以获得0的扫描计数并返回一行。例如,
打开统计IO;从[master].[dbo].[spt\u值]中选择*其中type='A'和number=1以及name='rpc'
这是有文档记录的链接不再存在available@Archmede请参阅,您是否也可以替换您答案中的链接以方便其他用户这些文档有点混乱,但有很好的描述: