SQL 2005缓存计划小结
2008-11-24 10:12:49 来源:WEB开发网如果这时使用两个不同的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
上面图中红框表示的date_format的值分别为3和1。因此,如果你要使用不同的客户端进行数据库的连接时一定不要忘记指定它们使用相同的SET选项等等被缓存的信息,也不要在执行时改变这些被缓存的属性。从上面的结果你也可以看到sql_handle和plan_handle是1:N的关系。
缓存中保存的是整个批命令的计划,它由每个单独的语句的计划组成。为了能高效的执行每条语句,在执行之前都会判断此语句所引用的对象架构有无变化、统计信息是否过期。如果符合任一条件,即便批已经开始执行,这条语句也会被重新编译。在SQL2000中会导致整个批中的语句都被重新编译,而2005因为有了语句级编译的功能可以减少对CPU和内存的占用。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接