查看与清除缓存计划

来源:互联网 发布:ubuntu退出文件夹命令 编辑:程序博客网 时间:2024/04/30 15:25

SELECT plan_handle, st.text  FROM sys.dm_exec_cached_plans   CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st 
where text like '%confirmorder%'

DBCC FREEPROCCACHE (0x050008008FD01E3E40A1E644040000000000000000000000);

 

 

 

缓存管理机制对于任何系统的性能有着很重要的地位。像任何可靠的数据库管理系统一样,SQL Server享有一个优化性能的复杂缓存管理系统而不用任何用户的干涉。有一些方法可以用来把一个计划或者数据增加到SQL Server缓存中或者把一个计划或者数据从SQL Server缓存中删除,但是只建议把这些技术用来测试或者达到解决问题的目的。记住缓存机制的重要性,但是怎样才能得到SQL Server中的计划和它们的使用统计资料呢?

  SQL Server 7.0发布的版本之前,计划缓存是用于SQL Server的整个内存的单独可配置缓存区域。只有存储过程缓存在缓存的那个部分。由于这个原因,它被叫做程序缓存,在SQL Server 7.0和后面的版本中,计划缓存不是SQL Server内存单独的一个部分。现在SQL Server 是用一个非常动态的集成内存管理和缓存管理机制。

  下面的脚本用于SQL Server 2000和前面的版本。它将提供SQL Server 计划缓存的内容和使用频率。

  分析SQL Server计划缓存

  下面是SQL Server 2000脚本#1的部分结果集。

       分析SQL Server计划缓存

  图一

  对于SQL Server 2005和它更新的版本,DMV已经被引进来获得这一信息。因此要得到缓存计划的内容和使用统计数据,你可能要使用下面的DMV脚本。

  分析SQL Server计划缓存

 

 

 

下面是SQL Server 2005脚本#2的部分结果集。

       分析SQL Server计划缓存

  图二

  上述脚本以及它们的描述所使用的整个领域如下:

  分析SQL Server计划缓存

分析SQL Server计划缓存

  利用上述脚本你可以看到SQL Server中的对象和它们的使用频率。记住对于SQL Server 2000,你需要使用系统表syscacheobjects而对于SQL Server 2005和更新的版本,主要使用DMV sys.dm_exec_cached_plans

  当测试或者解决问题时,你可能需要清除计划缓存。你可以使用下面两种命令来达到目的。

  

 

     Script # 3: 清除整个SQL Server计划缓存

  DBCC FREEPROCCACHE

  GO

  Script #4: 清除某个特定数据库的SQL Server 计划缓存

  DBCC FLUSHPROCINDB ()

  GO

  /*

  You can get DBID through following command

  Select dbid from sysdatabases where name = <'DBName'>

  */

  除了上面的命令,下面的操作也将刷新整个计划缓存而新批需要新的计划。

  分离任何数据库

  在SQL Server 2005或更高版本中升级任何数据库到兼容性级别90或者更高

  针对任何数据库运行 ALTER DATABASE ... MODIFY FILEGROUP 命令

  运行 ALTER DATABASE ... COLLATE来修改任何数据库的校对

  用下面任何一个命令来更改一个数据库将会把缓存在具体数据库中的所有计划都删除掉。

  ALTER DATABASE ..... MODIFY NAME

  ALTER DATABASE ..... SET ONLINE

  ALTER DATABASE ..... SET OFFLINE

  ALTER DATABASE ..... SET EMERGENCY

  下面的操作也会删除一个具体数据库的缓存计划。

  删除一个数据库

  数据库自动关掉

  这是与在这里提及没有一种方法可以把一个单独的查询计划从SQL 2005和更低版本的缓存中删除有关,但是在SQL 2008中现在是可能的。

 

原创粉丝点击