Czy SQL Server 2008 przechowuje datę utworzenia planów wykonania?

13

Niedawno zaktualizowaliśmy używaną przez nas aplikację, która wymagała modyfikacji schematu bazy danych. Te zmiany mogły zmusić do odrzucenia buforowanych planów wykonania. Gdyby SQL Server został zmuszony do stworzenia szeregu nowych planów, mogłoby to spowolnić wrażenia użytkownika. Chciałbym dowiedzieć się, czy tak właśnie było.

Moje pytanie brzmi: czy SQL Server 2008 przechowuje datę utworzenia buforowanych planów wykonania? Widok zarządzania sys.dm_exec_cached_plansnie ma żadnych pól daty, więc podejrzewam, że nie.

Eugene M.
źródło

Odpowiedzi:

12

Nie jest przechowywany sys.dm_exec_cached_plansani nigdzie nie jest zakopany w planie XML, który mogę znaleźć. Istnieją jednak przydatne informacje w innych DMV.

W przypadku procedur przechowywanych możemy uzyskać czas buforowania planu 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);

W przypadku zapytań ad-hoc czas utworzenia jest następujący 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);

Według @SqlKiwi ... zmiana z czas_tworzenia na czas_buforowany była spowodowana tym, że w 2008 r. Dodano procedury i wyzwalacze i wykorzystano okazję do wybrania bardziej opisowej nazwy. Czas utworzenia / buforowania odzwierciedla ostatnią kompilację, a nie czas utworzenia pierwotnego planu.

Mark Storey-Smith
źródło