DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC FREEPROCCACHE

DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC FREEPROCCACHE,第1张

概述删除计划缓存中的所有元素,通过指定计划句柄或 SQL 句柄从计划缓存中删除特定计划,或者删除与指定资源池相关联的所有缓存条目。  Transact-SQL 语法约定 语法 DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ] 参数 ( {  plan_handle |  s

删除计划缓存中的所有元素,通过指定计划句柄或 sql 句柄从计划缓存中删除特定计划,或者删除与指定资源池相关联的所有缓存条目。

 Transact-SQL 语法约定

语法
DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]
参数
( {  plan_handle |  sql_handle |  pool_name } )

plan_handle 用于唯一标识已执行并且其计划驻留在计划缓存中的批处理的查询计划。plan_handle 的数据类型为 varbinary(64),可从下列动态管理对象中获得此参数:

sys.dm_exec_cached_plans

sys.dm_exec_requests

sys.dm_exec_query_memory_grants

sys.dm_exec_query_stats

sql_handle 是要清除的批处理的 sql 句柄。sql_handle 的数据类型为 varbinary(64),可从下列动态管理对象中获得此参数:

sys.dm_exec_query_stats

sys.dm_exec_cursors

sys.dm_exec_xml_handles

sys.dm_exec_query_memory_grants

pool_name 是资源调控器资源池的名称。pool_name 的数据类型为 sysname,可通过查询 sys.dm_resource_governor_resource_pools 动态管理视图获得此参数。

若要将资源调控器工作负荷组与资源池相关联,请查询 sys.dm_resource_governor_workload_groups 动态管理视图。有关会话的工作负荷组的信息,请查询 sys.dm_exec_sessions 动态管理视图。

WITH NO_INFOMSGS

禁止显示所有信息性消息。

注释

小心使用 DBCC FREEPROCCACHE 清除计划缓存。例如,释放计划缓存将导致系统重新编译存储过程,而不重用缓存中的存储过程。这会导致查询性能暂时性地突然降低。对于计划缓存中每个已清除的缓存存储区,sql Server 错误日志将包含以下信息性消息:“由于 'DBCC FREEPROCCACHE' 或 'DBCC FREESYstemCACHE' *** 作,sql Server 经历了 '%s' 缓存存储区(计划缓存的一部分)的 %d 次刷新。”只要每五分钟刷新一次缓存,此消息就将每五分钟记录一次。

结果集
如果未指定 WITH NO_INFOMSGS 子句,DBCC FREEPROCCACHE 将返回:

“DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。”

权限
需要对服务器拥有 ALTER SERVER STATE 权限。

示例
A. 从计划缓存中清除查询计划

以下示例通过指定查询计划句柄从计划缓存中清除查询计划。为了确保示例查询在计划缓存中,首先执行该查询。将查询 sys.dm_exec_cached_plans 和sql_text 动态管理视图以返回查询的计划句柄。然后,将结果集中的计划句柄值插入 DBCC FREEPROCACHE 语句,以从计划缓存中仅删除该计划。

Transact-SQL
USE AdventureWorks2008R2;GOSELECT * FROM Person.Address;GOSELECT plan_handle,st.textFROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS stWHERE text liKE N'SELECT * FROM Person.Address%';GO

下面是结果集:

plan_handle                                         text

--------------------------------------------------  -----------------------------

0x060006001ECA270EC0215D05000000000000000000000000  SELECT * FROM Person.Address;

(1 row(s) affected)

-- Remove the specific plan from the cache.DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);GO
B. 清除计划缓存中的所有计划

以下示例清除计划缓存中的所有元素。指定了 WITH NO_INFOMSGS 子句来阻止显示信息消息。

DBCC FREEPROCCACHE WITH NO_INFOMSGS;
C. 清除与资源池相关联的所有缓存条目

以下示例清除与指定资源池相关联的所有缓存条目。sys.dm_resource_governor_resource_pools 视图首先被查询,以便获取 pool_name 的值。

SELECT * FROM sys.dm_resource_governor_resource_pools;GODBCC FREEPROCCACHE ('default');GO
总结

以上是内存溢出为你收集整理的DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC FREEPROCCACHE全部内容,希望文章能够帮你解决DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC FREEPROCCACHE所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1171989.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存