Czy istnieje sposób, w jaki mogę ustalić, czy plan został właśnie wygenerowany dla określonego zapytania, czy też został znaleziony w pamięci podręcznej planu?
10
Czy istnieje sposób, w jaki mogę ustalić, czy plan został właśnie wygenerowany dla określonego zapytania, czy też został znaleziony w pamięci podręcznej planu?
SQL Server 2012 ma wskaźnik w samym planie RetrievedFromCache
, który może być „prawdziwy” lub „fałszywy”.
To wydaje się być właściwość, o którą pytasz.
To jest próbka (ostatni wiersz pokazuje właściwość):
<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">
Niestety nie widzę niczego podobnego w planie wygenerowanym przez SQL Server 2008 R2.
W SQL Server 2008 R2 można użyć sys.dm_exec_query_stats
systemowego DMV do sprawdzenia creation_time
kolumny pod kątem planów o tej samej query_hash
wartości. Skrót zapytania można uzyskać z nagłówka planu XML (patrz przykład powyżej). To zapytanie zwróci wiersze dotyczące planu wspomnianego powyżej:
SELECT *
FROM sys.dm_exec_query_stats qs
WHERE qs.query_hash = 0x9A4B63A948B30EA0;