Condividi tramite


DBCC FREEPROCCACHE (Transact-SQL)

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

Nota

DBCC FREEPROCCACHE non comporta la cancellazione delle statistiche di esecuzione delle stored procedure compilate in modo nativo.La cache delle procedure non contiene informazioni sulle stored procedure compilate in modo nativo.Tutte le statistiche di esecuzione raccolte dalle esecuzioni delle procedure verranno visualizzate nelle viste a gestione dinamica delle statistiche di esecuzione: sys.dm_exec_procedure_stats (Transact-SQL) e sys.dm_exec_query_plan (Transact-SQL).

Si applica a: SQL Server (da SQL Server 2008 alla versione corrente).

Icona di collegamento a un argomento Convenzioni 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 piani dal set di risultati viene quindi inserito nell'istruzione DBCC FREEPROCACHE per rimuovere solo quel piano dalla cache dei piani.

USE AdventureWorks2012;
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                                         text

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

0x060006001ECA270EC0215D05000000000000000000000000  SELECT * FROM Person.Address;

(1 row(s) affected)

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

Vedere anche

Riferimento

DBCC (Transact-SQL)

Concetti

Resource Governor