D'où vient un plan d'exécution?

Réponses:

9

SQL Server 2012 a un indicateur dans le plan lui-même, RetrievedFromCachequi peut être "vrai" ou "faux".

Cela semble être la propriété que vous demandez.

Ceci est un exemple (la dernière ligne montre la propriété):

<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">

Malheureusement, je ne vois rien de similaire dans un plan généré par SQL Server 2008 R2.

Dans SQL Server 2008 R2, vous pouvez utiliser le sys.dm_exec_query_statsDMV système pour inspecter la creation_timecolonne pour les plans qui ont la même query_hashvaleur. Le hachage de requête peut être obtenu à partir de l'en-tête du plan XML (voir l'exemple ci-dessus). Cette requête renverra des lignes concernant le plan mentionné ci-dessus:

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