SQL Server 2008 stocke-t-il la date de création des plans d'exécution?

13

Nous avons récemment mis à niveau une application que nous utilisons, ce qui impliquait de modifier le schéma de la base de données. Ces modifications auraient pu forcer la suppression des plans d'exécution mis en cache. Si SQL Server a été contraint de créer un tas de nouveaux plans, cela aurait pu ralentir l'expérience utilisateur. J'aimerais savoir si c'était le cas.

Ma question est donc la suivante: SQL Server 2008 stocke-t-il la date de création des plans d'exécution mis en cache? La vue de gestion sys.dm_exec_cached_plansn'a pas de champs de date, donc je suppose que non.

Eugene M
la source

Réponses:

12

Il n'est pas stocké dans sys.dm_exec_cached_plans, ni n'est enterré nulle part dans le plan XML que je peux trouver. Cependant, il existe des informations utiles dans d'autres DMV.

Pour les procédures stockées, nous pouvons obtenir l'heure à laquelle un plan a été mis en cache à partir de 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);

Pour les requêtes ad hoc, il y a l'heure de création dans 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);

Selon @SqlKiwi ... le passage de creation_time à cached_time était simplement dû au fait que des procédures et des déclencheurs ont été ajoutés en 2008 et que l'occasion a été saisie de choisir un nom plus descriptif. L'heure créée / mise en cache reflète la dernière compilation, pas l'heure de création du plan d'origine.

Mark Storey-Smith
la source