技术开发 频道

SQL2005缓存计划小结

  如果是在64位系统中,则上面的计算公式为4*0.75+8*0.1=3.8G。我们看到SQL2005的SP2比SP1对过程缓冲区的大小做了更多的限制,这是为了防止因为有大量的缓存计划而导致与数据缓存争抢内存。

  那么一个批命令会不会有多个执行计划呢?只有在改变了执行时的环境时才会生成另一个执行计划。视图sys.dm_exec_plan_attributes包含了某计划的一些属性信息,下面我们试验一下改变执行环境后为同一批命令生成多个执行计划,执行下面的语句:

  我得到的结果如下:

  从第三个结果集看到因为两个语句执行时,因为改了日期格式的设置,分别为其生成了一个执行计划。你可以看到两个计划都对应了相同的sql_handle,但是却有不同的plan_handle。

  如果这时使用两个不同的plan_handle进行计划属性的查询,会得到如下的结果:

--使用前面查询所得到的plan_handle
SELECT * FROM sys.dm_exec_plan_attributes(0x06000800DBFC6801B841C60F000000000000000000000000)
WHERE is_cache_key=1

SELECT * FROM sys.dm_exec_plan_attributes(0x06000800DBFC6801B8617805000000000000000000000000)
WHERE is_cache_key=1

 

USE AdventureWorks;
GO
DECLARE @dbid int;
SET @dbid=DB_ID();
DBCC FLUSHPROCINDB(@dbid);
GO
SET DATEFORMAT mdy;
GO
SELECT * FROM HumanResources.Employee WHERE EmployeeID=1
GO

SET DATEFORMAT ymd;
GO
SELECT * FROM HumanResources.Employee WHERE EmployeeID=1
GO
SELECT st.text, qs.sql_handle, qs.plan_handle
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(sql_handle) st
WHERE st.text LIKE '%Employee%';

GO
0
相关文章