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

Eug*_*e M 13 sql-server-2008 execution-plan

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

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

Mar*_*ith 12

它没有存储在sys.dm_exec_cached_plans. 但是,其他 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);
Run Code Online (Sandbox Code Playgroud)

对于即席查询,创建时间为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);
Run Code Online (Sandbox Code Playgroud)

根据@SqlKiwi...从creation_time 到cached_time 的变化只是因为在2008 年添加了过程和触发器,并借此机会选择了一个更具描述性的名称。创建/缓存时间反映的是最后一次编译,而不是原始计划的创建时间。


归档时间:

查看次数:

5720 次

最近记录:

12 年,11 月 前