De onde vem um plano de execução?

Respostas:

9

O SQL Server 2012 possui um indicador no próprio plano RetrievedFromCache, que pode ser "verdadeiro" ou "falso".

Parece ser a propriedade que você está perguntando.

Esta é uma amostra (a última linha mostra a propriedade):

<StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1" 
StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" 
StatementSubTreeCost="0.0508992" StatementText="SELECT COUNT(*) 
&#xD;&#xA;FROM sys.tables" StatementType="SELECT" 
QueryHash="0x9A4B63A948B30EA0" QueryPlanHash="0xF357CAE882D5B15D" 
RetrievedFromCache="true">

Infelizmente, não vejo nada semelhante em um plano gerado pelo SQL Server 2008 R2.

No SQL Server 2008 R2, você pode usar a sys.dm_exec_query_statsDMV do sistema para inspecionar a creation_timecoluna em busca de planos com o mesmo query_hashvalor. O hash da consulta pode ser obtido no cabeçalho do XML do plano (veja o exemplo acima). Esta consulta retornará linhas relacionadas ao plano mencionado acima:

SELECT *
FROM sys.dm_exec_query_stats qs
WHERE qs.query_hash = 0x9A4B63A948B30EA0;
Max Vernon
fonte