清除执行计划缓存
DBCC FREEPROCCACHE --清除执行计划缓存
查看执行缓存
select * from sys.dm_exec_cached_plans
如何利用好执行计划缓存
-
- 使用存储过程,或者 sp_executesql 的方式调用会被重复使用的语句,而不要直接用 ad-hoc 语句或者 dynamic SQL 。
-
- 在语句里引用对象(表、视图、存储过程等),到带上它的 schema 名字,而不光是对象自己的名字。
-
- 将 数据库 Parameterization 属性设置成 Forced
- 这个属性是开启数据库强制参数化。也就是说,对于在这个数据库下运行的大部分语句,SQL Server 都会先参数化,再运行。如果应用经常用 adhoc 的方式调用一样的语句,强制参数化可能会有所帮助
-
- 统计信息更新
- 统计信息手工或者自动更新后,对和它有关的执行计划都不再能重用,而会产生重编译。
-
- Create Procedure … with Recompile 选项 和 Exce … with Recomplie 选项 在重建或者调用存储过程的时候使用 “with Recomplie”,会强制 Sql Server 在调用这个存储过程的时候,永远都要先编译,再运行。
-
- 用户使用了 sp_recomplie
-
- 用户在调用语句的时候,使用了 “Keep Plan” 或者 “KeepFixed Plan” 这样的查询提示
定时任务
- 注意对一些复杂的存储过程,定时清理一下(凌晨)