No está almacenado sys.dm_exec_cached_plans
, ni está enterrado en ninguna parte del plan XML que pueda encontrar. Sin embargo, hay información útil en otros DMV.
Para los procedimientos almacenados, podemos obtener el tiempo desde que se almacenó en caché un plan sys.dm_exec_procedure_stats
:
SELECT TOP(250)
p.name AS [SP Name]
, ps.execution_count
, ps.cached_time
FROM
sys.procedures p WITH (NOLOCK)
INNER JOIN
sys.dm_exec_procedure_stats ps WITH (NOLOCK)
ON p.[object_id] = ps.[object_id]
WHERE
ps.database_id = DB_ID()
ORDER BY
ps.cached_time DESC
OPTION
(RECOMPILE);
Para consultas ad-hoc, existe el tiempo de creación en sys.dm_exec_query_stats
:
SELECT TOP(250)
st.[text] AS [QueryText]
, qs.execution_count
, qs.creation_time
FROM
sys.dm_exec_cached_plans cp WITH (NOLOCK)
INNER JOIN
sys.dm_exec_query_stats qs WITH (NOLOCK)
ON qs.plan_handle = cp.plan_handle
CROSS APPLY
sys.dm_exec_sql_text(cp.plan_handle) st
WHERE
cp.objtype = N'Adhoc'
ORDER BY
qs.creation_time DESC
OPTION
(RECOMPILE);
Según @SqlKiwi ... el cambio de creation_time a cached_time fue solo porque se agregaron procedimientos y desencadenantes en 2008 y se aprovechó la oportunidad para elegir un nombre más descriptivo. El tiempo creado / en caché refleja la última compilación, no el tiempo de creación del plan original.