Есть ли способ определить, был ли план только что сгенерирован для определенного запроса или был найден в кэше планов?
10
Есть ли способ определить, был ли план только что сгенерирован для определенного запроса или был найден в кэше планов?
SQL Server 2012 имеет индикатор в самом плане RetrievedFromCache
, который может быть «истинным» или «ложным».
Похоже, это свойство, о котором вы спрашиваете.
Это пример (последняя строка показывает свойство):
<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">
К сожалению, я не вижу ничего подобного в плане, созданном SQL Server 2008 R2.
В SQL Server 2008 R2 вы можете использовать sys.dm_exec_query_stats
системный DMV для проверки creation_time
столбца на наличие планов с одинаковым query_hash
значением. Хеш запроса можно получить из заголовка XML плана (см. Пример выше). Этот запрос вернет строки относительно плана, упомянутого выше:
SELECT *
FROM sys.dm_exec_query_stats qs
WHERE qs.query_hash = 0x9A4B63A948B30EA0;