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). |
Convenzioni della sintassi Transact-SQL
Sintassi
DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]
Argomenti
( { plan_handle | sql_handle | pool_name } )
plan_handle identifica in modo univoco un piano di query per un batch eseguito il cui piano risiede nella cache dei piani. plan_handle è di tipo varbinary(64) e può essere ottenuto dagli oggetti a gestione dinamica seguenti:sql_handle è l'handle SQL del batch da cancellare. sql_handle è di tipo varbinary(64) e può essere ottenuto dagli oggetti a gestione dinamica seguenti:
pool_name è il nome di un pool di risorse di Resource Governor. pool_name è di tipo sysname e può essere ottenuto eseguendo una query sulla vista a gestione dinamica sys.dm_resource_governor_resource_pools.
Per associare un gruppo del carico di lavoro di Resource Governor al pool di risorse, eseguire la query sys.dm_resource_governor_workload_groups nella vista a gestione dinamica. Per informazioni sul gruppo del carico di lavoro per una sessione, eseguire la query sys.dm_exec_sessions nella vista a gestione dinamica.
WITH NO_INFOMSGS
Disattiva tutti i messaggi informativi.
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