DBCC FREEPROCCACHE (Transact-SQL)DBCC FREEPROCCACHE (Transact-SQL)

SI APPLICA A: sìSQL Server noDatabase SQL di Azure sìAzure SQL Data Warehouse sìParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

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.Removes all elements from the plan cache, removes a specific plan from the plan cache by specifying a plan handle or SQL handle, or removes all cache entries associated with a specified resource pool.

Nota

DBCC FREEPROCCACHE non comporta la cancellazione delle statistiche di esecuzione delle stored procedure compilate in modo nativo.DBCC FREEPROCCACHE does not clear the execution statistics for natively compiled stored procedures. La cache delle procedure non contiene informazioni sulle stored procedure compilate in modo nativo.The procedure cache does not contain information about natively compiled stored procedures. 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).Any execution statistics collected from procedure executions will appear in the execution statistics DMVs: sys.dm_exec_procedure_stats (Transact-SQL) and sys.dm_exec_query_plan (Transact-SQL).

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

Sintassi per SQL Server:Syntax for SQL Server:

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

Sintassi per Azure SQL Warehouse e Parallel Data Warehouse:Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

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

ArgomentiArguments

( { plan_handle | sql_handle | pool_name } )( { 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 uniquely identifies a query plan for a batch that has executed and whose plan resides in the plan cache. plan_handle è un argomento di tipo varbinary(64) che può essere ottenuto dagli oggetti a gestione dinamica seguenti:plan_handle is varbinary(64) and can be obtained from the following dynamic management objects:

sql_handle è l'handle SQL del batch da cancellare.sql_handle is the SQL handle of the batch to be cleared. sql_handle è un argomento di tipo varbinary(64) che può essere ottenuto dagli oggetti a gestione dinamica seguenti:sql_handle is varbinary(64) and can be obtained from the following dynamic management objects:

pool_name è il nome di un pool di risorse di Resource Governor.pool_name is the name of a Resource Governor resource pool. 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.pool_name is sysname and can be obtained by querying the sys.dm_resource_governor_resource_pools dynamic management view.
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.To associate a Resource Governor workload group with a resource pool, query the sys.dm_resource_governor_workload_groups dynamic management view. Per informazioni sul gruppo del carico di lavoro per una sessione, eseguire una query sulla vista a gestione dinamica sys.dm_exec_sessions.For information about the workload group for a session, query the sys.dm_exec_sessions dynamic management view.

WITH NO_INFOMSGSWITH NO_INFOMSGS
Disattiva tutti i messaggi informativi.Suppresses all informational messages.

COMPUTECOMPUTE
Ripulire la cache dei piani di query da ogni nodo di calcolo.Purge the query plan cache from each Compute node. Si tratta del valore predefinito.This is the default value.

ALLALL
Ripulire la cache dei piani di query da ogni nodo di calcolo e dal nodo di controllo.Purge the query plan cache from each Compute node and from the Control node.

Nota

A partire da SQL Server 2016 (13.x)SQL Server 2016 (13.x), viene usata l'istruzione ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE per cancellare la cache (dei piani) delle procedure per il database nell'ambito.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), the ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE to clear the procedure (plan) cache for the database in scope.

RemarksRemarks

Usare DBCC FREEPROCCACHE per cancellare con cautela la cache dei piani.Use DBCC FREEPROCCACHE to clear the plan cache carefully. 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.Clearing the procedure (plan) cache causes all plans to be evicted, and incoming query executions will compile a new plan, instead of reusing any previously cached plan.

Ciò può causare una riduzione improvvisa e temporanea delle prestazioni delle query poiché aumenta il numero di nuove compilazioni.This can cause a sudden, temporary decrease in query performance as the number of new compilations increases. Il log degli errori di SQL ServerSQL Server contiene il messaggio informativo seguente per ogni archivio cache cancellato nella cache dei piani: "SQL ServerSQL 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'".For each cleared cachestore in the plan cache, the SQL ServerSQL Server error log will contain the following informational message: " SQL ServerSQL 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.This message is logged every five minutes as long as the cache is flushed within that time interval.

La cache delle procedure viene cancellata anche con le seguenti operazioni di riconfigurazione:The following reconfigure operations also clear the procedure cache:

  • access check cache bucket countaccess check cache bucket count
  • access check cache quotaaccess check cache quota
  • clr enabledclr enabled
  • cost threshold for parallelismcost threshold for parallelism
  • cross db ownership chainingcross db ownership chaining
  • index create memoryindex create memory
  • max degree of parallelismmax degree of parallelism
  • max server memorymax server memory
  • max text repl sizemax text repl size
  • max worker threadsmax worker threads
  • min memory per querymin memory per query
  • min server memorymin server memory
  • query governor cost limitquery governor cost limit
  • query waitquery wait
  • remote query timeoutremote query timeout
  • user optionsuser options

Set di risultatiResult Sets

Quando non viene specificata la clausola WITH NO_INFOMSGS, DBCC FREEPROCCACHE restituisce: "Esecuzione DBCC completata.When the WITH NO_INFOMSGS clause is not specified, DBCC FREEPROCCACHE returns: "DBCC execution completed. Se sono stati visualizzati messaggi di errore DBCC, rivolgersi all'amministratore di sistema".If DBCC printed error messages, contact your system administrator."

AutorizzazioniPermissions

Applicabile a: SQL ServerSQL Server, Parallel Data WarehouseParallel Data WarehouseApplies to: SQL ServerSQL Server, Parallel Data WarehouseParallel Data Warehouse

  • È necessario disporre dell'autorizzazione ALTER SERVER STATE per il server.Requires ALTER SERVER STATE permission on the server.

Applicabile a: SQL Data WarehouseSQL Data WarehouseApplies to: SQL Data WarehouseSQL Data Warehouse

  • Richiede l'appartenenza al ruolo predefinito del server DB_OWNER.Requires membership in the DB_OWNER fixed server role.

Osservazioni generali per SQL Data WarehouseSQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseGeneral Remarks for SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

È possibile eseguire contemporaneamente più comandi DBCC FREEPROCCACHE.Multiple DBCC FREEPROCCACHE commands can be run concurrently. In SQL Data WarehouseSQL Data Warehouse o Parallel Data WarehouseParallel Data Warehouse 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.In SQL Data WarehouseSQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse, clearing the plan cache can cause a temporary decrease in query performance as incoming queries compile a new plan, instead of reusing any previously cached plan.

DBCC FREEPROCCACHE (COMPUTE) fa sì che solo SQL ServerSQL Server ricompili le query quando vengono eseguite sui nodi di calcolo.DBCC FREEPROCCACHE (COMPUTE) only causes SQL ServerSQL Server to recompile queries when they are run on the Compute nodes. SQL Data WarehouseSQL Data Warehouse o Parallel Data WarehouseParallel Data Warehouse non ricompilano il piano delle query parallelo generato nel nodo di controllo.It does not cause SQL Data WarehouseSQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse to recompile the parallel query plan that is generated on the Control node. DBCC FREEPROCCACHE può essere annullato durante l'esecuzione.DBCC FREEPROCCACHE can be cancelled during execution.

Limitazioni e restrizioni per SQL Data WarehouseSQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseLimitations and Restrictions for SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

DBCC FREEPROCCACHE non può essere eseguito all'interno di una transazione.DBCC FREEPROCCACHE can not run within a transaction. DBCC FREEPROCCACHE non è supportato in un'istruzione EXPLAIN.DBCC FREEPROCCACHE is not supported in an EXPLAIN statement.

Metadati per SQL Data WarehouseSQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseMetadata for SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

Quando viene eseguito DBCC FREEPROCCACHE, viene aggiunta una nuova riga alla vista di sistema sys.pdw_exec_requests.A new row is added to the sys.pdw_exec_requests system view when DBCC FREEPROCCACHE is run.

Esempi: SQL ServerSQL ServerExamples: SQL ServerSQL Server

A.A. Cancellazione di un piano di query dalla cache dei pianiClearing a query plan from the plan cache

Nell'esempio seguente viene indicato come cancellare un piano di query dalla cache dei piani specificando l'handle del piano di query.The following example clears a query plan from the plan cache by specifying the query plan handle. Per verificare che la query di esempio si trovi nella cache dei piani, la query viene prima eseguita.To ensure the example query is in the plan cache, the query is first executed. 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.The sys.dm_exec_cached_plans and sys.dm_exec_sql_text dynamic management views are queried to return the plan handle for the 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.The plan handle value from the result set is then inserted into the DBCC FREEPROCACHE statement to remove only that plan from the plan cache.

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:Here is the result set.

plan_handle                                         text  
--------------------------------------------------  -----------------------------  
0x060006001ECA270EC0215D05000000000000000000000000  SELECT * FROM Person.Address;  
  
(1 row(s) affected)
-- Remove the specific plan from the cache.  
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);  
GO  

B.B. Cancellazione di tutti i piani dalla cache dei pianiClearing all plans from the plan cache

Nell'esempio seguente vengono cancellati tutti gli elementi dalla cache dei piani.The following example clears all elements from the plan cache. La clausola WITH NO_INFOMSGS viene specificata per impedire la visualizzazione del messaggio di informazioni.The WITH NO_INFOMSGS clause is specified to prevent the information message from being displayed.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;  

C.C. Cancellazione di tutte le voci di cache associate a un pool di risorseClearing all cache entries associated with a resource pool

Nell'esempio seguente vengono cancellate tutte le voci di cache associate a un pool di risorse specificato.The following example clears all cache entries associated with a specified resource pool. Viene eseguita prima una query sulla vista sys.dm_resource_governor_resource_pools per ottenere il valore per pool_name.The sys.dm_resource_governor_resource_pools view is first queried to obtain the value for pool_name.

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

Esempi: SQL Data WarehouseSQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

D.D. Esempi di sintassi di base DBCC FREEPROCCACHEDBCC FREEPROCCACHE Basic Syntax Examples

Nell'esempio seguente vengono rimosse tutte le cache dei piani di query dai nodi di calcolo.The following example removes all existing query plan caches from the Compute nodes. Nonostante il contesto sia impostato su UserDbSales, tutte le cache dei piani di query dai nodi di calcolo vengono rimosse.Although the context is set to UserDbSales, the Compute node query plan caches for all databases will be removed. La clausola WITH NO_INFOMSGS impedisce che i messaggi informativi vengano visualizzati nei risultati.The WITH NO_INFOMSGS clause prevents informational messages from appearing in the results.

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.The following example has the same results as the previous example, except that informational messages will show in the results.

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.When informational messages are requested and the execution is successful, the query results will have one line per Compute node.

E.E. Concessione dell'autorizzazione per l'esecuzione di DBCC FREEPROCCACHEGranting Permission to run DBCC FREEPROCCACHE

Nell'esempio seguente all'account di accesso David viene concessa l'autorizzazione per l'esecuzione di DBCC FREEPROCCACHE.The following example gives the login David permission to run DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David; 
GO

Vedere ancheSee Also

DBCC (Transact-SQL)DBCC (Transact-SQL)
Resource GovernorResource Governor
ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)