DBCC FREEPROCCACHE (Transact-SQL)

Rimuove tutti gli elementi dalla cache dei piani, rimuove un piano specifico dalla cache dei piani specificando un handle di piano o SQL, oppure rimuove tutte le voci di cache associate a un pool di risorse specificato.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]

Argomenti

Osservazioni

Utilizzare DBCC FREEPROCCACHE per cancellare con cautela la cache dei piani. Liberare la cache dei piani comporta, ad esempio, la ricompilazione di una stored procedure, anziché riutilizzarla dalla cache. Ciò può portare a un'improvvisa e temporanea riduzione delle prestazioni di esecuzione delle query. Il log degli errori di SQL Server contiene il messaggio informativo seguente per ogni archivio cache cancellato nella cache dei piani: "SQL Server ha rilevato %d occorrenza/e di scaricamento dell'archivio cache '%s' (parte della cache dei piani) a causa di operazioni 'DBCC FREEPROCCACHE' o 'DBCC FREESYSTEMCACHE'". Questo messaggio viene registrato ogni cinque minuti per tutta la durata dello scaricamento della cache.

Set di risultati

Quando non viene specificata la clausola WITH NO_INFOMSGS, DBCC FREEPROCCACHE restituisce:

"Esecuzione di DBCC completata. Se DBCC ha stampato dei messaggi di errore, contattare l'amministratore di sistema."

Autorizzazioni

È richiesta l'autorizzazione ALTER SERVER STATE nel server.

Esempi

A. Cancellazione di un piano di query dalla cache dei piani

Nell'esempio seguente viene indicato come cancellare un piano di query dalla cache dei piani specificando l'handle del piano di query. Per verificare che la query di esempio si trovi nella cache dei piani, la query viene prima eseguita. Vengono eseguite delle query sulle viste a gestione dinamica sys.dm_exec_cached_plans e sys.dm_exec_sql_text per restituire l'handle di piano per la query. Il valore dell'handle di piano dal set di risultati viene quindi inserito nell'istruzione DBCC FREEPROCACHE così da rimuovere solo quel piano dalla cache dei piani.

USE AdventureWorks;
GO
SELECT * FROM Person.Address;
GO
SELECT plan_handle, st.text
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N'SELECT * FROM Person.Address%';
GO

Set di risultati:

plan_handle                                         testo

--------------------------------------------------  -----------------------------

0x060006001ECA270EC0215D05000000000000000000000000  SELECT * FROM Person.Address;

(Righe interessate: 1)

-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO

B. Cancellazione di tutti i piani dalla cache dei piani

Nell'esempio seguente vengono cancellati tutti gli elementi dalla cache dei piani. La clausola WITH NO_INFOMSGS viene specificata per impedire la visualizzazione del messaggio di informazioni.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

C. Cancellazione di tutte le voci di cache associate a un pool di risorse

Nell'esempio seguente vengono cancellate tutte le voci di cache associate a un pool di risorse specificato. Viene eseguita una query prima sulla vista sys.dm_resource_governor_resource_pools per ottenere il valore per pool_name.

SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
DBCC FREEPROCCACHE (default);
GO

Cronologia modifiche

Aggiornamento del contenuto

Correzione delle informazioni sul pool di risorse nell'introduzione e aggiunta delle informazioni sulle modalità per ottenere le informazioni sul nome del pool di Resource Governor nella sezione Argomenti.

Aggiunta dell'esempio C.