SQL Server 2000: как узнать, сколько планов кэшируется хранимой процедурой? - PullRequest
1 голос
/ 26 июня 2009

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

1 Ответ

3 голосов
/ 26 июня 2009

Вы можете запрашивать кэш несколькими различными способами, либо просматривая его содержимое, либо просматривая некоторую связанную статистику.

Пара команд, которые помогут вам на вашем пути:

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)
...