mssql 获取服务器中缓存计划的方法


一、 获取MSSQL服务器中缓存计划

由于服务器莫名其妙变的非常慢,由以前的两分钟,变为现在的两小时,初步怀疑是数据库执行计划失效所致,
所以现在需先获取,系统地缓存计划,然后进行相应的清理,使系统提速
1.1 查看当前缓存计划

     SELECT * FROM sys.dm_exec_cached_plans;  
   

1.2 查看缓存计划所对应的脚本

      select 
	b.text,
		* from  sys.dm_exec_cached_plans a
		cross apply sys.dm_exec_sql_text(a.plan_handle)  as b 
 
   


二、 清除SQL服务器中的缓存计划

2.1 缓存系统自动失效方法

1 当DB服务器内存达到使用上限时,此时系统会自动清除执行计划缓存
2 对表 视图进行修改(会导致执行计划发生变化)
3 执行计划所涉及的统计信息发生变化
4 删除执行计划所涉及的索引
5 表数据发生大量变化—导致统计信息发生变化,而使执行计划发生变化
6 重编译存储过程 例: sp_recompile “存储过程名称”,运行此命令后,执行计划缓存会清除此存储过程的计划缓存
7 调用存储过程使,使用 with recompile 显式指定需重编译存储过程


2.2 手动强制失效缓存计划

2.2.1取消所有缓存的执行计划
DBCC FREEPROCCACHE;
2.2.2 清空指定数据库的缓存计划
DBCC FLUSHPROCINDB(dbid);
2.2.3 清空指定存储区的执行计划
DBCC FREESYSTEMCACHE(‘cachestore’)
cachestore参数为:
‘ALL’、’pool_name’、’Object Plans’ 、’SQL Plans’ 、’Bound Trees’

相关阅读:
CROSS APPLY OUTER APPLY 关键字简介
MSSQL 清空缓存相关语句收集