SQL Server 2008是否存储执行计划的创建日期?


13

最近,我们升级了一个使用的应用程序,其中涉及修改数据库的架构。这些更改可能迫使已丢弃的缓存执行计划。如果SQL Server被迫创建许多新计划,则可能会减慢用户体验。我想看看是否是这种情况。

因此,我的问题是,SQL Server 2008是否存储缓存的执行计划的创建日期?管理视图sys.dm_exec_cached_plans没有任何日期字段,因此我怀疑没有。

Answers:


12

它没有存储在中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年添加了过程和触发器,并借此机会选择了更具描述性的名称。创建/缓存的时间反映的是上次编译,而不是原始计划的创建时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.