Gibt es eine Möglichkeit, festzustellen, ob ein Plan gerade für eine bestimmte Abfrage generiert oder im Plan-Cache gefunden wurde?
10
Gibt es eine Möglichkeit, festzustellen, ob ein Plan gerade für eine bestimmte Abfrage generiert oder im Plan-Cache gefunden wurde?
SQL Server 2012 verfügt im Plan selbst über einen Indikator RetrievedFromCache
, der entweder "true" oder "false" sein kann.
Dies scheint die Eigenschaft zu sein, nach der Sie fragen.
Dies ist ein Beispiel (die letzte Zeile zeigt die Eigenschaft):
<StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1"
StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound"
StatementSubTreeCost="0.0508992" StatementText="SELECT COUNT(*)

FROM sys.tables" StatementType="SELECT"
QueryHash="0x9A4B63A948B30EA0" QueryPlanHash="0xF357CAE882D5B15D"
RetrievedFromCache="true">
Leider sehe ich in einem von SQL Server 2008 R2 generierten Plan nichts Ähnliches.
In SQL Server 2008 R2 können Sie die sys.dm_exec_query_stats
System-DMV verwenden, um die creation_time
Spalte auf Pläne mit demselben query_hash
Wert zu untersuchen. Der Abfrage-Hash kann aus dem Header des Plan-XML abgerufen werden (siehe Beispiel oben). Diese Abfrage gibt Zeilen bezüglich des oben genannten Plans zurück:
SELECT *
FROM sys.dm_exec_query_stats qs
WHERE qs.query_hash = 0x9A4B63A948B30EA0;