답변:
에 저장되지 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 년에 프로 시저와 트리거가 추가되었고보다 구체적인 이름을 선택할 수있게 되었기 때문입니다. 생성 / 캐시 된 시간은 원래 계획의 생성 시간이 아니라 마지막 컴파일을 반영합니다.