Answers:
它没有存储在中sys.dm_exec_cached_plans
,也没有埋在我可以找到的计划XML中的任何位置。但是,其他DMV中有有用的信息。
对于存储过程,我们可以从获取缓存计划的时间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);
对于临时查询,创建时间为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);
根据@SqlKiwi ...,从creation_time到cached_time的更改仅仅是因为在2008年添加了过程和触发器,并借此机会选择了更具描述性的名称。创建/缓存的时间反映的是上次编译,而不是原始计划的创建时间。