SQL统计IO扫描次数的解释

28

简单的问题,但是我在Google上没有找到一个好的解释。当使用Set Statistics IO ON时,逻辑读取和扫描计数将显示在管理工具的消息窗口中。如果我有:

tblExample,扫描计数为5,逻辑读取为20

扫描计数代表什么?


文档有点混乱,但是有很好的描述: https://learn.microsoft.com/en-us/sql/t-sql/statements/set-statistics-io-transact-sql?view=sql-server-ver15 - Archmede
5个回答

24

关于"table scan"的含义,我找到的最好的解释是:

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

换句话说,仅凭扫描次数本身是不足够的信息。您需要知道那些扫描究竟是什么,因此您需要查看实际执行计划以获取更多详细信息。总之,仅靠它本身并不是非常有用的指标!

此外:

http://www.eggheadcafe.com/software/aspnet/32171165/set-statistics-io-scan-count-explanation.aspx

不幸的是,现在的扫描次数并没有提供很多信息。如果你看到像19223这样的数字,那么这个表可能会通过嵌套循环连接被访问多次。

曾经有一段时间,“扫描次数”只是意味着“表被访问的次数”,但那是很久以前了,大概是在SQL 6.5。只有在像...这样的查询中,您才能获得具有0定义的扫描计数。

select *
from TestA1
where CompanyID = 1
and CompanyID = 2

...在不访问表的情况下,SQL Server能够推断出查询不会返回任何行。


6
如果您在对唯一索引进行查找时,可以获得扫描计数为0且返回一行的结果。例如:SET STATISTICS IO ON; SELECT * FROM [master].[dbo].[spt_values] WHERE type='A' AND number=1 AND name='rpc' 详情请参见这里 - Martin Smith

19

来自在线书籍

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

逻辑读取: 从数据缓存中读取的页面数量。

物理读取: 从磁盘读取的页面数量。

预读取: 为查询放置到缓存中的页面数量。

另请参见:http://technet.microsoft.com/en-us/library/ms184361.aspx


18
如果要继续收集 msdn 引用,那么 [1] 在 [2] 中有重复:
- 逻辑读取 该值表示处理查询所需的总页面访问次数。每个页面都从数据缓存中读取,无论是否需要为了任何给定的读取将该页面从磁盘带入缓存。此值始终至少与物理读取的值一样大且通常更大。同一页可以被多次读取(例如当一个查询由索引驱动时),因此对于表的逻辑读取计数可能大于表中的页面数。
- 物理读取 该值表示从磁盘中读取的页面数;它始终小于或等于逻辑读取的值。性能监视器显示的缓冲区命中率的值是根据逻辑读取和物理读取的值计算出来的。
- 预读取读取 预读取读取的值表示在处理查询时使用预读取机制读取到缓存中的页面数。这些页面不一定被查询使用。如果最终需要一个页面,则会计算逻辑读取,但不会计算物理读取。高值意味着物理读取的值可能较低,缓存命中率可能比... [由 vgv8 截断]
- 扫描计数扫描计数(Scan Count)值表示对应表格被访问的次数。嵌套循环联接(Nested Loop Join)中的外部表格扫描计数为1。对于内部表格,扫描计数可能是表格被“循环”访问的次数。逻辑读取次数由扫描计数乘以每个扫描所访问的页面数量之和决定。但是,即使对于嵌套循环联接,内部表格的扫描计数可能也会显示为1。SQL Server可能会从内部表格中复制所需的行到缓存中的工作表,并使用此工作表来访问实际数据行。当此步骤包含在计划中时,在STATISTICS IO输出中通常没有指示。必须使用STATISTIC TIME的输出以及有关执行查询所使用的实际处理计划的信息来确定执行查询所涉及的实际工作。哈希联接和合并联接通常将参与联接的两个表格的扫描计数都显示为1,但这些类型的联接可能涉及更多的内存。可以在查询执行时检查sysprocesses中的memusage值,但与physical_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]
监视查询性能
优化查询性能
由Ron Soukup, Kalen Delaney编写的第14章,发表在由微软出版社出版的《Microsoft SQL Server 7.0内幕》中
http://technet.microsoft.com/en-us/library/cc917719.aspx#ECAA



-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接