WEB开发网
开发学院数据库MSSQL Server SQL 2005缓存计划小结 阅读

SQL 2005缓存计划小结

 2008-11-24 10:12:49 来源:WEB开发网   
核心提示: 如果这时使用两个不同的plan_handle进行计划属性的查询,会得到如下的结果:--使用前面查询所得到的plan_handleSELECT * FROM sys.dm_exec_plan_attributes(0x06000800DBFC6801B841C60F0000000000000

如果这时使用两个不同的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

SQL 2005缓存计划小结

上面图中红框表示的date_format的值分别为3和1。因此,如果你要使用不同的客户端进行数据库的连接时一定不要忘记指定它们使用相同的SET选项等等被缓存的信息,也不要在执行时改变这些被缓存的属性。从上面的结果你也可以看到sql_handle和plan_handle是1:N的关系。

缓存中保存的是整个批命令的计划,它由每个单独的语句的计划组成。为了能高效的执行每条语句,在执行之前都会判断此语句所引用的对象架构有无变化、统计信息是否过期。如果符合任一条件,即便批已经开始执行,这条语句也会被重新编译。在SQL2000中会导致整个批中的语句都被重新编译,而2005因为有了语句级编译的功能可以减少对CPU和内存的占用。

上一页  1 2 3 4  下一页

Tags:SQL 缓存 计划

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接