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 次 |
| 最近记录: |