¿Hay alguna manera de determinar si un plan se generó para una consulta en particular o si se encontró en la caché del plan?
10
¿Hay alguna manera de determinar si un plan se generó para una consulta en particular o si se encontró en la caché del plan?
SQL Server 2012 tiene un indicador en el plan en sí RetrievedFromCache
, que puede ser "verdadero" o "falso".
Esta parece ser la propiedad sobre la que está preguntando.
Esta es una muestra (la última línea muestra la propiedad):
<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">
Desafortunadamente, no veo nada similar en un plan generado por SQL Server 2008 R2.
En SQL Server 2008 R2, puede usar el sys.dm_exec_query_stats
sistema DMV para inspeccionar la creation_time
columna en busca de planes que tengan el mismo query_hash
valor. El hash de consulta se puede obtener del encabezado del plan XML (consulte el ejemplo anterior). Esta consulta devolverá filas con respecto al plan mencionado anteriormente:
SELECT *
FROM sys.dm_exec_query_stats qs
WHERE qs.query_hash = 0x9A4B63A948B30EA0;