执行计划相关知识

执行计划相关知识

msdn参考:http://technet.microsoft.com/zh-cn/library/ms191158.aspx

SET STATISTICS XML ON
SET SHOWPLAN_XML ON

输出下面内容

 1 <?xml version="1.0" encoding="utf-16"?>
 2 <ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.2" Build="11.0.9120.5" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
 3   <BatchSequence>
 4     <Batch>
 5       <Statements>
 6         <StmtSimple StatementCompId="1" StatementEstRows="11.5571" StatementId="1" StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" CardinalityEstimationModel110="OFF" StatementSubTreeCost="0.105026" StatementText="SELECT BusinessEntityID,FirstName,LastName&#xD;&#xA;FROM Person.Person&#xD;&#xA;WHERE UPPER(FirstName)='Gustavo'" StatementType="SELECT" QueryHash="0xA8917389A994847E" QueryPlanHash="0xB3A976F142350334" RetrievedFromCache="true">
 7           <StatementSetOptions ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" NUMERIC_ROUNDABORT="false" QUOTED_IDENTIFIER="true" />
 8           <QueryPlan DegreeOfParallelism="1" CachedPlanSize="16" CompileTime="2" CompileCPU="2" CompileMemory="232">
 9             <MemoryGrantInfo SerialRequiredMemory="0" SerialDesiredMemory="0" />
10             <OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="205727" EstimatedPagesCached="51431" EstimatedAvailableDegreeOfParallelism="2" />
11             <RelOp AvgRowSize="78" EstimateCPU="0.0221262" EstimateIO="0.0809028" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="11.5571" LogicalOp="Index Scan" NodeId="1" Parallel="false" PhysicalOp="Index Scan" EstimatedTotalSubtreeCost="0.103029" TableCardinality="19972">
12               <OutputList>
13                 <ColumnReference Database="[AdventureWorks2012]" Schema="[Person]" Table="[Person]" Column="BusinessEntityID" />
14                 <ColumnReference Database="[AdventureWorks2012]" Schema="[Person]" Table="[Person]" Column="FirstName" />
15                 <ColumnReference Database="[AdventureWorks2012]" Schema="[Person]" Table="[Person]" Column="LastName" />
16               </OutputList>
17               <RunTimeInformation>
18                 <RunTimeCountersPerThread Thread="0" ActualRows="2" ActualEndOfScans="1" ActualExecutions="1" />
19               </RunTimeInformation>
20               <IndexScan Ordered="false" ForcedIndex="false" ForceSeek="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
21                 <DefinedValues>
22                   <DefinedValue>
23                     <ColumnReference Database="[AdventureWorks2012]" Schema="[Person]" Table="[Person]" Column="BusinessEntityID" />
24                   </DefinedValue>
25                   <DefinedValue>
26                     <ColumnReference Database="[AdventureWorks2012]" Schema="[Person]" Table="[Person]" Column="FirstName" />
27                   </DefinedValue>
28                   <DefinedValue>
29                     <ColumnReference Database="[AdventureWorks2012]" Schema="[Person]" Table="[Person]" Column="LastName" />
30                   </DefinedValue>
31                 </DefinedValues>
32                 <Object Database="[AdventureWorks2012]" Schema="[Person]" Table="[Person]" Index="[IX_Person_LastName_FirstName_MiddleName]" IndexKind="NonClustered" Storage="RowStore" />
33                 <Predicate>
34                   <ScalarOperator ScalarString="upper([AdventureWorks2012].[Person].[Person].[FirstName])=N'Gustavo'">
35                     <Compare CompareOp="EQ">
36                       <ScalarOperator>
37                         <Intrinsic FunctionName="upper">
38                           <ScalarOperator>
39                             <Identifier>
40                               <ColumnReference Database="[AdventureWorks2012]" Schema="[Person]" Table="[Person]" Column="FirstName" />
41                             </Identifier>
42                           </ScalarOperator>
43                         </Intrinsic>
44                       </ScalarOperator>
45                       <ScalarOperator>
46                         <Const ConstValue="N'Gustavo'" />
47                       </ScalarOperator>
48                     </Compare>
49                   </ScalarOperator>
50                 </Predicate>
51               </IndexScan>
52             </RelOp>
53           </QueryPlan>
54         </StmtSimple>
55       </Statements>
56     </Batch>
57   </BatchSequence>
58 </ShowPlanXML>

 StatementOptmEarlyAbortReason="GoodEnoughPlanFound"

RelOp AvgRowSize="78" EstimateCPU="0.0221262" EstimateIO="0.0809028" EstimateRebinds="0" EstimateRewinds="0"

Rewinds和Rebinds的解释:

Init():Init() 方法使物理运算符初始化自身并设置所有需要的数据结构。 尽管一个物理运算符通常只接收一次 Init() 调用,但也可以接收许多次调用。
GetNext():GetNext() 方法使物理运算符获得数据的第一行或后续行。 物理运算符可以不接收 GetNext() 调用,也可以接收许多次调用。
Close():Close() 方法使物理运算符执行某些清除操作,然后关闭。 一个物理运算符只接收一个 Close() 调用。
GetNext() 方法返回一个数据行,它的调用次数作为 ActualRows 显示在使用 SET STATISTICS PROFILE ON 或 SET STATISTICS XML ON 生成的显示计划输出中。 有关这些 SET 选项的详细信息,请参阅 SET STATISTICS PROFILE (Transact-SQL) 和 SET STATISTICS XML (Transact-SQL)。
显示计划输出中显示的 ActualRebinds 和 ActualRewinds 计数是指 Init() 方法被调用的次数。 除非运算符位于循环联接的内侧,否则 ActualRebinds 等于一,ActualRewinds 等于零。 如果运算符位于循环联接的内侧,那么重新绑定次数和重绕次数之和应等于联接外侧所处理的行数。 重新绑定意味着联接的一个或多个相关参数发生更改后,必须重新计算联接的内侧。 重绕意味着任何相关参数都没有发生更改,可以重用之前的内侧结果集。
ActualRebinds 和 ActualRewinds 显示在使用 SET STATISTICS XML ON 生成的 XML 显示计划输出中。 它们只为 Nonclustered Index Spool、Remote Query、Row Count Spool、Sort、Table Spool 和 Table-valued Function 运算符填充。 如果 StartupExpression 属性设置为 TRUE,也会为 Assert 和 Filter 运算符填充 ActualRebinds 和 ActualRewinds。
当 ActualRebinds 和 ActualRewinds 显示在 XML 显示计划中时,它们可以与 EstimateRebinds 和 EstimateRewinds 相比较。 如果它们没有显示,则预计的行数 (EstimateRows) 可以与实际的行数 (ActualRows) 相比较。 注意,如果它们没有显示,实际的图形显示计划输出中将实际的重新绑定次数和重绕次数均显示为零。
只有在显示计划输出是使用 SET STATISTICS XML ON 生成的情况下,相关计数器 ActualEndOfScans 才可用。 只要物理运算符到达其数据流的结尾,此计数器就增加一。 物理运算符可以到达其数据流结尾零次、一次或多次。 对于重新绑定次数和重绕次数,只有在运算符位于循环联接的内侧时,扫描结束的次数才可以多于一次。 扫描结束的次数应少于或等于重新绑定次数与重绕次数之和。

 


 

逻辑运算符和物理运算符

1 USE [GPOSDB]
2 GO
3 SET STATISTICS PROFILE ON 
4 GO
5 SELECT * FROM [dbo].[SystemPara] WHERE [RecordNo]=12

 


 

和XML输出是一样的

SET STATISTICS XML ON
SET SHOWPLAN_XML ON

StatementOptmEarlyAbortReason="GoodEnoughPlanFound"

 


GetNext():GetNext() 方法使物理运算符获得数据的第一行或后续行。 物理运算符可以不接收 GetNext() 调用,也可以接收许多次调用。
GetNext() 方法返回一个数据行,它的调用次数作为 ActualRows 显示在使用 SET STATISTICS PROFILE ON 或 SET STATISTICS XML ON 生成的显示计划输出中。

 

posted @ 2013-08-30 23:46  桦仔  阅读(437)  评论(0编辑  收藏  举报