DBCC FREEPROCCACHE (Transact-SQL)

Si applica a: SQL Server Azure SQL DatabaseIstanza gestita di SQL di Azure Azure SynapseAnalytics AnalyticsPlatform System (PDW)

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 cancella le statistiche di esecuzione per le 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 DMV delle statistiche di esecuzione: sys.dm_exec_procedure_stats (Transact-SQL) e sys.dm_exec_query_plan (Transact-SQL).

Convenzioni di sintassi Transact-SQL

Sintassi

Sintassi per SQL Server e database SQL di Azure:

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

Sintassi per Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW):

DBCC FREEPROCCACHE [ ( COMPUTE | ALL ) ]
     [ WITH NO_INFOMSGS ]
[;]

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

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 è un argomento di tipo varbinary(64) che può essere ottenuto dagli oggetti a gestione dinamica seguenti:

sql_handle è l'handle SQL del batch da cancellare. sql_handle è un argomento di tipo varbinary(64) che può essere ottenuto dagli oggetti a gestione dinamica seguenti:

pool_name è il nome di un pool di risorse di Resource Governor. pool_name è un argomento di tipo sysname che 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 una query sulla vista a gestione dinamica sys.dm_resource_governor_workload_groups. Per informazioni sul gruppo del carico di lavoro per una sessione, eseguire una query sulla vista a gestione dinamica sys.dm_exec_sessions.

WITH NO_INFOMSGS

Disattiva tutti i messaggi informativi.

COMPUTE

Ripulire la cache dei piani di query da ogni nodo di calcolo. Si tratta del valore predefinito.

ALL

Ripulire la cache dei piani di query da ogni nodo di calcolo e dal nodo di controllo.

Nota

A partire da SQL Server 2016 (13.x), ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE può essere usato per cancellare la cache della routine (piano) per il database corrente.

Commenti

Usare DBCC FREEPROCCACHE per cancellare attentamente la cache dei piani. Se si cancella la cache (dei piani) delle procedure, tutti i piani vengono rimossi e le esecuzioni delle query in entrata vengono compilate in un nuovo piano, anziché riutilizzare piani precedentemente memorizzati nella cache.

Ciò può causare una riduzione improvvisa e temporanea delle prestazioni delle query poiché aumenta il numero di nuove compilazioni. Per ogni archivio cache cancellato nella cache dei piani, il log degli errori di SQL Server conterrà il messaggio informativo seguente:

SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

Questo messaggio viene registrato ogni cinque minuti per tutta la durata dello scaricamento della cache.

La cache delle procedure viene cancellata anche con le seguenti operazioni di riconfigurazione:

  • access check cache bucket count
  • access check cache quota
  • clr enabled
  • cost threshold for parallelism
  • cross db ownership chaining
  • index create memory
  • max degree of parallelism
  • max server memory
  • max text repl size
  • max worker threads
  • min memory per query
  • min server memory
  • query governor cost limit
  • query wait
  • remote query timeout
  • user options

In Azure SQL Database agisce DBCC FREEPROCCACHE nell'istanza del motore di database che ospita il database corrente o il pool elastico. L'esecuzione DBCC FREEPROCCACHE in un database utente cancella la cache dei piani per tale database. Se il database si trova in un pool elastico, cancella anche la cache del piano in tutti gli altri database in tale pool elastico. L'esecuzione del master comando nel database non ha alcun effetto sugli altri database nello stesso server logico. L'esecuzione di questo comando in un database usando l'obiettivo del servizio Basic, S0 o S1 può cancellare la cache dei piani in altri database usando questi obiettivi di servizio nello stesso server logico.

Set di risultati

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

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Autorizzazioni

Si applica a: SQL Server, Piattaforma di strumenti analitici (PDW)

  • Richiede l'autorizzazione ALTER SERVER STATE nel server.

Si applica a: Database SQL di Azure

  • Richiede l'appartenenza al ruolo server ##MS_ServerStateManager##.

Si applica a: Azure Synapse Analytics

  • Richiede l'appartenenza al ruolo predefinito del server db_owner .

Osservazioni per Azure Synapse Analytics e Analytics Platform System (PDW)

È possibile eseguire più DBCC FREEPROCCACHE comandi simultaneamente.

In Azure Synapse Analytics o in Piattaforma di strumenti analitici (PDW) la cancellazione della cache dei piani può causare un peggioramento temporaneo delle prestazioni delle query poiché le query in entrata compilano un nuovo piano, invece di riutilizzarne uno precedentemente memorizzato nella cache.

DBCC FREEPROCCACHE (COMPUTE)causa solo la ricompilazione delle query SQL Server quando vengono eseguite nei nodi di calcolo. Non causa la ricompilazione del piano di query parallela generato nel nodo Control Azure Synapse Analytics o Analytics Platform System (PDW).

DBCC FREEPROCCACHE può essere annullato durante l'esecuzione.

Limitazioni e restrizioni per Azure Synapse Analytics e Analytics Platform System (PDW)

DBCC FREEPROCCACHE non è possibile eseguire all'interno di una transazione.

DBCC FREEPROCCACHE non è supportato in un'istruzione EXPLAIN.

Metadati per Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

Una nuova riga viene aggiunta alla sys.pdw_exec_requests visualizzazione di sistema quando DBCC FREEPROCCACHE viene eseguita.

Esempi: SQL Server

R. Cancellare 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. Viene eseguita una 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 AdventureWorks2022;
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

Questo è il 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. Cancellare 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. Cancellare tutte le voci della 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 prima una query 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

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

D. Sintassi di base DBCC FREEPROCCACHE

Nell'esempio seguente vengono rimosse tutte le cache dei piani di query dai nodi di calcolo. Anche se il contesto è impostato su UserDbSales, le cache del piano di query del nodo di calcolo per tutti i database verranno rimosse. La WITH NO_INFOMSGS clausola impedisce la visualizzazione dei messaggi informativi nei risultati.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

Nell'esempio seguente vengono restituiti gli stessi risultati dell'esempio precedente, ad eccezione del fatto che i messaggi informativi vengono visualizzati nei risultati.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE);

Quando i messaggi informativi vengono richiesti e l'esecuzione ha esito positivo, i risultati della query contengono una riga per ogni nodo di calcolo.

E. Concedere l'autorizzazione per eseguire DBCC FREEPROCCACHE

Nell'esempio seguente viene fornita l'autorizzazione di accesso David per eseguire DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David;
GO

Vedi anche