Иногда при диагностировании проблем с нашей базой данных SQL Server 2000 может быть полезно знать, что хранимая процедура использует плохой план или у вас возникают проблемы с хорошим планом в то время, когда у меня возникают проблемы. Мне интересно, есть ли запрос или команда, которую я могу запустить, чтобы рассказать мне, сколько планов выполнения кэшируется в настоящее время для конкретной хранимой процедуры.SQL Server 2000: Как узнать, сколько планов хранится в хранимой процедуре?
1
A
ответ
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)
Как я могу понять, как существует много планов для хранимой процедуры в настоящее время? – Jon
SELECT objType, sql, * from syscacheobjects, где sql нравится 'yourproc%' –
Спасибо. Есть так много столбцов, что я не видел этого очевидного вначале. – Jon