资料来自于:http://technet.microsoft.com/zh-cn/library/ms187735(SQL.90).aspx SET SHOWPLAN_ALL (Transact-SQL) 使 Microsoft SQL Server 不 执行 Transact-SQL 语句 。SQL Server 返回有关 语句 执行 情况的详细信息,并估计 语句 对资源的需求。 语法
资料来自于:http://technet.microsoft.com/zh-cn/library/ms187735(SQL.90).aspx
SET SHOWPLAN_ALL (Transact-SQL)
使 Microsoft SQL Server 不 执行 Transact-SQL 语句 。SQL Server 返回有关 语句 执行 情况的详细信息,并估计 语句 对资源的需求。
语法
SET SHOWPLAN_ALL { ON | OFF }
备注
SET SHOWPLAN_ALL 的设置是在 执行 或运行时设置,而不是在分析时设置。
如果 SET SHOWPLAN_ALL 为 ON,则 SQL Server 将返回每个 语句 的 执行 信息但不 执行 语句 。Transact-SQL 语句 不会被 执行 。在将此选项设置为 ON 后,将始终返回有关所有后续 Transact-SQL 语句 的信息,直到将该选项设置为 OFF 为止。例如,如果在 SET SHOWPLAN_ALL 为 ON 时 执行 CREATE TABLE 语句 ,则 SQL Server 将从涉及同一个表的后续 SELECT 语句 返回错误信息,告知用户指定的表不存在。因此,对此表的后续引用将失败。如果 SET SHOWPLAN_ALL 为 OFF,则 SQL Server 将 执行 语句 ,但不生成报表。
SET SHOWPLAN_ALL 是供为处理其 输出而编写的应用程序使用的。使用 SET SHOWPLAN_TEXT,可为 Microsoft Win32 命令提示符应用程序(如 osql 实用工具)返回可读取的 输出。
不能在存储过程内指定 SET SHOWPLAN_TEXT 和 SET SHOWPLAN_ALL,它们必须是批处理中的唯一 语句 。
SET SHOWPLAN_ALL 将信息作为行集返回,该行集将以层次结构树的形式,表示 SQL Server 查询处理器在 执行 每个 语句 时采取的步骤。在 输出中,每个 语句 都有一行说明 语句 的文本,后面紧接着几行介绍 执行 步骤的详细信息。下表显示了 输出中包含的列。
列名 说明
StmtText
对于非 PLAN_ROW 类型的行,此列包含 Transact-SQL 语句 的文本。对于 PLAN_ROW 类型的行,此列包含对操作的说明。此列包含物理运算符,也可以选择包含逻辑运算符。此列还可以跟一则由物理运算符决定的说明。有关详细信息,请参阅 逻辑运算符和物理运算符引用 。
StmtId
当前批处理中的 语句 数。
NodeId
当前查询中的节点的 ID。
Parent
父步骤的节点 ID。
PhysicalOp
节点的物理实现算法。仅限于 PLAN_ROWS 类型的行。
LogicalOp
此节点表示的关系代数运算符。仅限于 PLAN_ROWS 类型的行。
Argument
提供有关当前 执行 的操作的补充信息。此列的内容取决于物理运算符。
DefinedValues
包含一组以逗号分隔的此运算符所引入的值。这些值可以是出现在当前查询(例如,在 SELECT 列表或 WHERE 子句中)内的计算表达式,也可以是查询处理器为处理该查询引入的内部值。以后在该查询内的任何其他地方都可以引用这些定义的值。仅限于 PLAN_ROWS 类型的行。
EstimateRows
由此运算符生成的预计 输出行数。仅限于 PLAN_ROWS 类型的行。
EstimateIO
此运算符的预计 I/O 开销。仅限于 PLAN_ROWS 类型的行。
EstimateCPU
此运算符的预计 CPU 开销。仅限于 PLAN_ROWS 类型的行。
AvgRowSize
通过此运算符传递的行的预计平均行大小(以字节为单位)。
TotalSubtreeCost
此操作和所有子操作的预计(累积)开销。
OutputList
包含当前操作正在提取的列的列表,此列表以逗号分隔。
Warnings
包含一组以逗号分隔的与当前操作相关的警告信息。警告消息可能包含字符串 "NO STATS:()" 和一组列表。此警告信息表示查询优化器曾尝试根据此列的统计信息做出决策,但没有找到可用的统计信息。因此,查询优化器不得不进行推测,这可能已导致选择了低效的查询计划。有关创建或更新列统计信息(这些统计信息有助于查询优化器选择更有效的查询计划)的详细信息,请参阅 更新统计信息 。此列可能选择包含字符串 MISSING JOIN PREDICATE,表示正在进行的联接(与表有关)未使用联接谓词。意外丢失联接谓词可能导致查询的运行 时间 比预期长得多,并返回一个巨大的结果集。如果出现此警告,请验证是否有意不使用联接谓词。
Type
节点类型。对于每个查询的父节点,这是 Transact-SQL 语句 类型(如 SELECT、INSERT、EXECUTE 等)。对于表示 执行 计划的子节点,这是 PLAN_ROW 类型。
Parallel
0 = 运算符没有以并行方式运行。
1 = 运算符正在以并行方式运行。
EstimateExecutions
当前查询运行期间,预计将 执行 此运算符的次数。
示例
以下两个 语句 使用了 SET SHOWPLAN_ALL 设置,用于显示 SQL Server 在查询中分析和优化索引的方式。
第一个查询在索引列上的 WHERE 子句中使用等于比较运算符 (=)。从而在 LogicalOp 列内得到 Clustered Index Seek 值,在 Argument 列内产生索引名。
第二个查询在 WHERE 子句中使用 LIKE 运算符。这将强制 SQL Server 使用聚集索引扫描并查找满足 WHERE 子句条件的数据。从而在 LogicalOp 列内得到 Clustered Index Scan 值,在 Argument 列内生成索引名;在 LogicalOp 列内产生 Filter 值,在 Argument 列内出现 WHERE 子句条件。
第一个索引查询的 EstimateRows 和 TotalSubtreeCost 属性中的值较小,这表示与非索引查询相比,该查询的处理速度快得多且使用的资源更少。
USE AdventureWorks; GO SET SHOWPLAN_ALL ON; GO -- First query. SELECT EmployeeID FROM HumanResources.Employee WHERE NationalIDNumber = '509647174'; GO -- Second query. SELECT EmployeeID, EmergencyContactID FROM HumanResources.Employee WHERE EmergencyContactID LIKE '1%'; GO SET SHOWPLAN_ALL OFF; GO
SET STATISTICS IO (Transact-SQL)
使 SQL Server 显示有关由 Transact-SQL 语句 生成的磁盘活动量的信息。
语法
SET STATISTICS IO { ON | OFF }
备注
如果 STATISTICS IO 为 ON,则显示统计信息。如果为 OFF,则不显示统计信息。
如果将此选项设置为 ON,则所有后续的 Transact-SQL 语句 将返回统计信息,直到将该选项设置为 OFF 为止。
下表列出并说明了各个 输出项。
输出项 含义
Table
表的名称。
scan count
执行 的扫描次数。
logical reads
从数据缓存读取的页数。
physical reads
从磁盘读取的页数。
read-ahead reads
为进行查询而放入缓存的页数。
lob logical reads
从数据缓存读取的 text 、 ntext 、 image 或大值类型 ( varchar(max) 、 nvarchar(max) 、 varbinary(max) ) 页的数目。
lob physical reads
从磁盘读取的 text 、 ntext 、 image 或大值类型页的数目。
lob read-ahead reads
为进行查询而放入缓存的 text 、 ntext 、 image 或大值类型页的数目。
SET STATISTICS IO 是在 执行 或运行时设置,而不是在分析时设置。
注意:
当 Transact-SQL 语句 检索 LOB 列时,有些 LOB 检索操作可能需要多次遍历 LOB 树。这可能会导致 SET STATISTICS IO 报告的次数比预期的逻辑读取次数更高。
示例
以下示例显示 SQL Server 处理 语句 时,进行了多少次逻辑读和物理读操作。
USE AdventureWorks; GO SET STATISTICS IO ON; GO SELECT * FROM Production.ProductCostHistory WHERE StandardCost
下面是结果集:
Table 'ProductCostHistory'. Scan count 1, logical reads 5, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SET STATISTICS PROFILE (Transact-SQL)
显示 语句 的配置文件信息。STATISTICS PROFILE 对即席查询、视图和存储过程有效。
语法
SET STATISTICS PROFILE { ON | OFF }
备注
STATISTICS PROFILE 为 ON 时, 执行 的各个查询都返回其常规结果集,后面跟一个附加结果集,显示查询 执行 的配置文件。
附加结果集包含查询的 SHOWPLAN_ALL 列以及下面的附加列。
列名 说明
Rows
各运算符生成的实际行数
Executes
运算符 执行 的次数
SET STATISTICS TIME (Transact-SQL)
显示分析、编译和 执行 各 语句 所需的毫秒数。
语法
SET STATISTICS TIME { ON | OFF }
备注
当 SET STATISTICS TIME 为 ON 时,会显示 语句 的 时间 统计信息。为 OFF 时,不显示 时间 统计信息。
SET STATISTICS TIME 的设置是在 执行 或运行时设置,而不是在分析时设置。
Microsoft SQL Server 不能在纤程模式下提供准确的统计信息,而纤程模式在启用 [轻型池] 配置选项时激活。
只有当使用 SET STATISTICS TIME ON 执行 查询时才更新 sysprocesses 表中的 cpu 列。当 SET STATISTICS TIME 为 OFF 时,将返回 0 。
ON 和 OFF 设置还影响 SQL Server Management Studio 内的[当前活动的进程信息视图]中的 CPU 列。
示例
下面的示例显示服务器的 执行 、分析和编译 时间 。
USE AdventureWorks; GO SET STATISTICS TIME ON GO SELECT * FROM Production.ProductCostHistory WHERE StandardCost
下面是结果集:
SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 1 ms. SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 1 ms. (269 row(s) affected) SQL Server Execution Times: CPU time = 0 ms, elapsed time = 2 ms. SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 1 ms.