2009-11-03 14 views

risposta

48

Per chiarezza ..........

esecuzione sp_recompile sarà "segno" dato stored procedura ricompilazione, che avverrà la prossima volta che viene eseguito.

L'utilizzo dell'opzione WITH RECOMPILE determina la generazione di un nuovo piano di esecuzione ogni volta che viene eseguita la stored procedure specificata.

Per cancellare l'intera cache procedura eseguire

DBCC FREEPROCCACHE 
+0

Questo è quello che stavo cercando, svuotare la cache! Grazie! – Brandon

+0

È possibile eseguire DBCC FREEPROCCACHE solo per una procedura specifica? – CodeMilian

+0

@CodeMilan: Sì è possibile rimuovere un plan_handle specifico (ad esempio il piano di query per una determinata stored procedure) dalla cache piano/procedura. Vedi BOL per un esempio: http://msdn.microsoft.com/en-us/library/ms174283.aspx –

5

Per le stored procedure, utilizzare l'opzione WITH RECOMPILE.

+0

+1 AHA !! Ora le cose cominciano ad avere senso :-) È meglio decifrare i messaggi degli utenti poco chiari, devo vedere ... –

+1

Si prega di notare che questo metodo ricompilerà la stored procedure data ogni volta che viene eseguito, quindi se si desidera basta forzare una ricompilazione, quindi utilizzare la stored procedure di sistema sp_recompile. –

1

sp_recompile esegue il dump del piano di query esistente e ricompila la procedura. Oppure è possibile riavviare SQL e questo cancellerà l'intera cache del piano di esecuzione.

WITH RECOMPILE genererà un nuovo piano OGNI volta che lo si esegue.

+7

Una piccola ma importante distinzione, l'esecuzione di sp_recompile non ricompilerà una determinata stored procedure ma la contrassegnerà per la ricompilazione al successivo avvio. –

4

Se si desidera reimpostare QEP per una stored procedure, si deve utilizzare sp_recompile

3

Non è del tutto chiaro dalla tua domanda quello che stai dopo. Ma oltre agli altri suggerimenti, DBCC FREEPROCCACHE cancella tutti i piani di esecuzione memorizzati nella cache.

Problemi correlati