适用于: SQL Server  
Azure SQL 数据库 
Azure SQL 托管实例
导致 SQL Server 显示 Transact-SQL 语句所生成的物理和逻辑 IO 活动量的相关信息。 物理 IO 与访问磁盘上的数据页相关,逻辑 IO 与访问内存中的数据页(数据缓存)相关。
语法
SET STATISTICS IO { ON | OFF }
输出
下表列出并说明了各个输出项。
| 输出项 | 含义 | 
|---|---|
| Table | 表的名称。 | 
| Scan count | 在任意方向到达叶级别之后开始的搜索或扫描次数,搜索/扫描目的是检索所有用于构造输出的最终数据集的值。 如果使用的索引是主键上的唯一索引或聚集索引,且只搜索一个值,则扫描计数为 0。 例如, WHERE Primary_Key_Column = <value>。当使用对非主键列定义的非唯一的聚集索引搜索一个值时,扫描计数为 1。 此过程的目的是针对你正在搜索的键值检查重复值。 例如, WHERE Clustered_Index_Key_Column = <value>。当 N 是使用索引键查找键值后,在叶级别向左侧或右侧开始的不同查找或扫描数时,扫描计数为 N。 | 
| logical reads | 从数据缓存读取的页数。 | 
| physical reads | 从磁盘读取的页数。 | 
| page server reads | 从页面服务器读取的页数。 ** | 
| read-ahead reads | 查询 通过预读放入缓存中的页数。 | 
| page server read-ahead reads | 通过 预读从页面服务器读取的页数,并通过查询放入数据缓存中。 ** | 
| lob logical reads | 从数据缓存中读取的 LOB* 页数。 | 
| lob physical reads | 从磁盘读取的 LOB* 页数。 | 
| lob page server reads | 从页面服务器读取的 LOB* 页数。 ** | 
| lob read-ahead reads | 查询 通过预读将 LOB* 页放入数据缓存中的页数。 | 
| lob page server read-ahead reads | 从 页面服务器读取的 LOB* 页数,并通过预读将数据缓存放入数据缓存中。 ** | 
* 大型对象二进制 (LOB) 数据类型包括文本、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)或列存储索引页。
** 仅限Azure SQL 数据库“超大规模”的非零。
注解
当 STATISTICS IO 为 ON 时,将显示统计信息;当为 OFF 时,不会显示该信息。
如果将此选项设置为“开”,则所有 Transact-SQL 语句均返回统计信息,直至将该选项设置为“关”。
SET STATISTICS IO设置是在执行或运行时设置的,而不是在分析时设置的。
注意
当 Transact-SQL 语句检索 LOB 列时,有些 LOB 检索操作可能需要多次遍历 LOB 树。 这可能会导致 SET STATISTICS IO 报告高于预期的逻辑读取。
权限
若要使用 SET STATISTICS IO,用户必须具有执行 Transact-SQL 语句的适当权限。 但不需要 SHOWPLAN 权限。
示例
此示例显示 SQL Server 处理语句时,进行了多少次逻辑读和物理读操作。
USE AdventureWorks2022;  
GO         
SET STATISTICS IO ON;  
GO  
SELECT *   
FROM Production.ProductCostHistory  
WHERE StandardCost < 500.00;  
GO  
SET STATISTICS IO OFF;  
GO  
下面是消息输出:
Table 'ProductCostHistory'. Scan count 1, logical reads 76, physical reads 0,
page server reads 0, read-ahead reads 0, page server read-ahead reads 0, 
lob logical reads 0, lob physical reads 0, lob page server reads 0, 
lob read-ahead reads 0, lob page server read-ahead reads 0.