有时,在诊断SQL Server 2000数据库的问题时,了解存储过程使用错误的计划或者在遇到问题时遇到问题时遇到问题可能会有所帮助。我想知道是否有一个查询或命令我可以运行告诉我当前为特定存储过程缓存了多少执行计划。
答案 0 :(得分:3)
您可以通过多种不同的方式查询缓存,查看其内容或查看一些相关的统计信息。
一些可以帮助您的命令:
SELECT * FROM syscacheobjects -- shows the contents of the procedure
-- cache for all databases
DBCC PROCCACHE -- shows some general cache statistics
DBCC CACHESTATS -- shows the usage statistics for the cache, things like hit ratio
如果只需要清除一个数据库的缓存,可以使用:
DBCC FLUSHPROCINDB (@dbid) -- that's an int, not the name of it.
-- The int you'd get from sysdatabases or the dbid() function
编辑:上面的行是2000,这就是问题。但是,对于访问使用 SQL Server 2005 的人来说,这与上述内容略有不同:
select * from sys.dm_exec_cached_plans -- shows the basic cache stuff
2005年展示计划的有用查询:
SELECT cacheobjtype, objtype, usecounts, refcounts, text
from sys.dm_exec_cached_plans p
join sys.dm_exec_query_stats s on p.plan_handle = s.plan_handle
cross apply sys.dm_exec_sql_text(s.sql_handle)