Speichert SQL Server 2008 das Erstellungsdatum von Ausführungsplänen?

13

Wir haben kürzlich eine von uns verwendete Anwendung aktualisiert, bei der das Schema für die Datenbank geändert wurde. Diese Änderungen hätten dazu führen können, dass zwischengespeicherte Ausführungspläne verworfen wurden. Wenn SQL Server gezwungen gewesen wäre, eine Reihe neuer Pläne zu erstellen, hätte dies die Benutzererfahrung möglicherweise verlangsamt. Ich würde gerne herausfinden, ob dies der Fall ist.

Meine Frage ist also, speichert SQL Server 2008 das Erstellungsdatum von zwischengespeicherten Ausführungsplänen? Die Management-Ansicht sys.dm_exec_cached_planshat keine Datumsfelder, daher nehme ich an, dass dies nicht der Fall ist.

Eugene M
quelle

Antworten:

12

Es wird weder sys.dm_exec_cached_plansin der Plan-XML gespeichert , noch ist es irgendwo in der Plan-XML vergraben, die ich finden kann. Es gibt jedoch nützliche Informationen in anderen DMVs.

Für gespeicherte Prozeduren können wir den Zeitpunkt abrufen, zu dem ein Plan zwischengespeichert wurde 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);

Für Ad-hoc-Abfragen gibt es die Erstellungszeit in 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);

Laut @SqlKiwi ... erfolgte der Wechsel von creation_time zu cached_time nur, weil 2008 Prozeduren und Trigger hinzugefügt wurden und die Gelegenheit genutzt wurde, einen aussagekräftigeren Namen zu wählen. Die erstellte / zwischengespeicherte Zeit spiegelt die letzte Kompilierung wider, nicht die Erstellungszeit des ursprünglichen Plans.

Mark Storey-Smith
quelle