2009-06-26 1 views
1

Иногда при диагностировании проблем с нашей базой данных SQL Server 2000 может быть полезно знать, что хранимая процедура использует плохой план или у вас возникают проблемы с хорошим планом в то время, когда у меня возникают проблемы. Мне интересно, есть ли запрос или команда, которую я могу запустить, чтобы рассказать мне, сколько планов выполнения кэшируется в настоящее время для конкретной хранимой процедуры.SQL Server 2000: Как узнать, сколько планов хранится в хранимой процедуре?

ответ

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 

Edit: над линией за 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) 
+0

Как я могу понять, как существует много планов для хранимой процедуры в настоящее время? – Jon

+0

SELECT objType, sql, * from syscacheobjects, где sql нравится 'yourproc%' –

+0

Спасибо. Есть так много столбцов, что я не видел этого очевидного вначале. – Jon