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.
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 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. |
Vedere anche