2009-11-03 2 views

ответ

48

Для ясности ..........

Выполнение sp_recompile будет «метка» данная хранимая процедура для перекомпиляции, что будет происходить в следующий раз, когда он выполняется.

Использование опции WITH RECOMPILE приведет к созданию нового плана выполнения каждый раз при выполнении данной хранимой процедуры.

Чтобы очистить весь кэш порядок выполнения

DBCC FREEPROCCACHE 
+0

Вот что я искал, очищая кеш! Благодаря! – Brandon

+0

Может ли DBCC FREEPROCCACHE выполняться только для определенной процедуры? – CodeMilian

+0

@CodeMilan: Да, вы можете выдать конкретный plan_handle (например, план запроса для данной хранимой процедуры) из кеша плана/процедуры. См. BOL для примера: http://msdn.microsoft.com/en-us/library/ms174283.aspx –

5

Для хранимых процедур вы используете опцию WITH RECOMPILE.

+0

+1 АГА !! Теперь все становится понятным :-) Вам лучше расшифровать непонятные сообщения пользователя, я должен увидеть ... –

+1

Обратите внимание, что этот метод будет перекомпилировать данную хранимую процедуру каждый раз, когда она будет выполнена, поэтому, если вы хотите просто вынудите одну перекомпилировать, затем используйте хранимую процедуру системы sp_recompile. –

1

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

С RECOMPILE собирается создать новый план КАЖДЫЙ раз, когда вы его выполняете.

+7

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

4

Если вы хотите сбросить QEP для хранимой процедуры, вы должны использовать sp_recompile

3

Это не совсем ясно из вашего вопроса, что вы после этого. Но в дополнение к другим предложениям, DBCC FREEPROCCACHE очищает все кэшированные планы выполнения.

Смежные вопросы