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

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure simAzure Synapse Analytics (SQL DW) simParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Remove todos os elementos do cache do plano, remove um plano específico do cache do plano, por meio da especificação de um identificador de plano ou identificador SQL ou remove todas as entradas de cache com um pool de recursos especificado.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.

Observação

DBCC FREEPROCCACHE não desmarca as estatísticas de execução para procedimentos armazenados compilados de modo nativo.DBCC FREEPROCCACHE does not clear the execution statistics for natively compiled stored procedures. O cache de procedimento não contém informações sobre procedimentos armazenados compilados de modo nativo.The procedure cache does not contain information about natively compiled stored procedures. Todas as estatísticas de execução coletadas de execuções de procedimento serão exibidas nas DMVs de estatísticas de execução: 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).

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

Sintaxe do SQL Server:Syntax for SQL Server:

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

Sintaxe do SQL Data Warehouse do Azure e do Parallel Data Warehouse:Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

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

ArgumentosArguments

( { plan_handle | sql_handle | pool_name } )( { plan_handle | sql_handle | pool_name } )
plan_handle identifica exclusivamente um plano de consulta de um lote que foi executado e cujo plano reside no cache de planos.plan_handle uniquely identifies a query plan for a batch that has executed and whose plan resides in the plan cache. plan_handle é varbinary(64) e pode ser obtido dos seguintes objetos de gerenciamento dinâmico:plan_handle is varbinary(64) and can be obtained from the following dynamic management objects:

sql_handle é o identificador SQL do lote a ser apagado.sql_handle is the SQL handle of the batch to be cleared. sql_handle é varbinary(64) e pode ser obtido dos seguintes objetos de gerenciamento dinâmico:sql_handle is varbinary(64) and can be obtained from the following dynamic management objects:

pool_name é o nome de um pool de recursos do Resource Governor.pool_name is the name of a Resource Governor resource pool. pool_name é sysname e pode ser obtido por meio da consulta da exibição de gerenciamento dinâmico 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.
Para associar um grupo de carga de trabalho do Resource Governor a um pool de recursos, consulte a exibição de gerenciamento dinâmico 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. Para obter informações sobre o grupo de carga de trabalho durante uma sessão, consulte a exibição de gerenciamento dinâmico 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
Suprime todas as mensagens informativas.Suppresses all informational messages.

COMPUTECOMPUTE
Limpe o cache de planos de consulta de cada nó de Computação.Purge the query plan cache from each Compute node. Este é o valor padrão.This is the default value.

ALLALL
Limpe o cache de planos de consulta de cada nó de Computação e do nó de Controle.Purge the query plan cache from each Compute node and from the Control node.

Observação

Começando pelo SQL Server 2016 (13.x)SQL Server 2016 (13.x), o ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE para limpar o cache (plano) de procedimento para o banco de dados no escopo.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

Use DBCC FREEPROCCACHE para limpar o cache do plano cuidadosamente.Use DBCC FREEPROCCACHE to clear the plan cache carefully. A limpeza do cache (plano) de procedimento faz com que todos os planos sejam removidos e as execuções de consulta de entrada compilarão um novo plano, em vez de reutilizar um plano anteriormente armazenado em 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.

Isso pode causar uma queda repentina e temporária no desempenho da consulta conforme o número de novas compilações aumenta.This can cause a sudden, temporary decrease in query performance as the number of new compilations increases. Para cada armazenamento em cache limpo no cache do plano, o log de erros do SQL ServerSQL Server conterá a seguinte mensagem informativa: "O SQL ServerSQL Server encontrou %d ocorrências de liberação de armazenamento em cache '% s' (parte do cache do plano) devido às operações 'DBCC FREEPROCCACHE' ou '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." Essa mensagem é registrada a cada cinco minutos, contanto que o cache seja liberado dentro desse intervalo de tempo.This message is logged every five minutes as long as the cache is flushed within that time interval.

As seguintes operações de reconfiguração também são limpas no cache de procedimento:The following reconfigure operations also clear the procedure cache:

  • contagem de bucket do cache de verificação de acessoaccess check cache bucket count
  • cota de cache de verificação de acessoaccess check cache quota
  • clr enabledclr enabled
  • limite de custo para paralelismocost threshold for parallelism
  • cross db ownership chainingcross db ownership chaining
  • memória para criar índiceindex create memory
  • grau máximo de paralelismomax degree of parallelism
  • max server memorymax server memory
  • max text repl sizemax text repl size
  • máximo de threads de trabalhomax worker threads
  • min memory per querymin memory per query
  • min server memorymin server memory
  • limite de custo do administrador de consultaquery governor cost limit
  • espera da consultaquery wait
  • remote query timeoutremote query timeout
  • opções de usuáriouser options

Conjuntos de resultadosResult Sets

Quando a cláusula WITH NO_INFOMSGS não estiver especificada, DBCC FREEPROCCACHE retornará: "A execução do DBCC foi concluída.When the WITH NO_INFOMSGS clause is not specified, DBCC FREEPROCCACHE returns: "DBCC execution completed. Se o DBCC imprimiu mensagens de erro, entre em contato com o administrador do sistema".If DBCC printed error messages, contact your system administrator."

PermissõesPermissions

Aplica-se a: SQL ServerSQL Server, Parallel Data WarehouseParallel Data WarehouseApplies to: SQL ServerSQL Server, Parallel Data WarehouseParallel Data Warehouse

  • Exige a permissão ALTER SERVER STATE no servidor.Requires ALTER SERVER STATE permission on the server.

Aplica-se a: SQL Data WarehouseSQL Data WarehouseApplies to: SQL Data WarehouseSQL Data Warehouse

  • Requer associação à função de servidor fixa DB_OWNER.Requires membership in the DB_OWNER fixed server role.

Comentários gerais sobre SQL Data WarehouseSQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseGeneral Remarks for SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

Vários comandos DBCC FREEPROCCACHE podem ser executados simultaneamente.Multiple DBCC FREEPROCCACHE commands can be run concurrently. No SQL Data WarehouseSQL Data Warehouse ou Parallel Data WarehouseParallel Data Warehouse, a limpeza do cache de planos pode causar uma queda temporária no desempenho da consulta conforme as consultas de entrada compilam um novo plano, em vez de reutilizar um plano previamente armazenado em 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) apenas faz com que SQL ServerSQL Server recompile consultas quando elas são executadas nos nós de Computação.DBCC FREEPROCCACHE (COMPUTE) only causes SQL ServerSQL Server to recompile queries when they are run on the Compute nodes. Ele não faz com que SQL Data WarehouseSQL Data Warehouse ou Parallel Data WarehouseParallel Data Warehouse recompile o plano de consulta paralela gerado no nó de Controle.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 pode ser cancelado durante a execução.DBCC FREEPROCCACHE can be cancelled during execution.

Limitações e restrições de 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 não pode ser executado em uma transação.DBCC FREEPROCCACHE can not run within a transaction. Não há suporte para DBCC FREEPROCCACHE em uma instrução EXPLAIN.DBCC FREEPROCCACHE is not supported in an EXPLAIN statement.

Metadados de SQL Data WarehouseSQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseMetadata for SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

Uma nova linha é adicionada à exibição do sistema sys.pdw_exec_requests quando DBCC FREEPROCCACHE é executado.A new row is added to the sys.pdw_exec_requests system view when DBCC FREEPROCCACHE is run.

Exemplos: SQL ServerSQL ServerExamples: SQL ServerSQL Server

A.A. Apagando um plano de consulta do cache do planoClearing a query plan from the plan cache

O exemplo a seguir apaga um plano de consulta do cache do plano especificando o identificador do plano de consulta.The following example clears a query plan from the plan cache by specifying the query plan handle. Para assegurar que a consulta de exemplo esteja no cache do plano, a consulta será executada primeiro.To ensure the example query is in the plan cache, the query is first executed. As exibições de gerenciamento dinâmico sys.dm_exec_cached_plans e sys.dm_exec_sql_text são consultadas para retornar o identificador de plano da consulta.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.

O valor do identificador do plano do conjunto de resultados é inserido na instrução DBCC FREEPROCACHE para remover apenas o plano em questão do cache do plano.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  

Aqui está o conjunto de resultados.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. Limpando todos os planos do cache do planoClearing all plans from the plan cache

O exemplo a seguir limpa todos os elementos do cache do plano.The following example clears all elements from the plan cache. A cláusula WITH NO_INFOMSGS é especificada para impedir a exibição da mensagem informativa.The WITH NO_INFOMSGS clause is specified to prevent the information message from being displayed.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;  

C.C. Limpando todas as entradas do cache associadas a um pool de recursosClearing all cache entries associated with a resource pool

O exemplo a seguir limpa todas as entradas do cache associadas a um pool de recursos especificado.The following example clears all cache entries associated with a specified resource pool. A exibição sys.dm_resource_governor_resource_pools é consultada primeiro para obter o valor de 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  

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

D.D. Exemplos de sintaxe básica de DBCC FREEPROCCACHEDBCC FREEPROCCACHE Basic Syntax Examples

O exemplo a seguir remove todos os caches de planos de consulta existentes dos nós de Computação.The following example removes all existing query plan caches from the Compute nodes. Embora o contexto seja definido como UserDbSales, os caches de plano de consulta do nó de Computação de todos os bancos de dados serão removidos.Although the context is set to UserDbSales, the Compute node query plan caches for all databases will be removed. A cláusula WITH NO_INFOMSGS impede a exibição de mensagens informativas nos resultados.The WITH NO_INFOMSGS clause prevents informational messages from appearing in the results.

USE UserDbSales;  
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

O exemplo a seguir traz os mesmos resultados do exemplo anterior, exceto que as mensagens informativas serão exibidas nos resultados.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 mensagens informativas forem solicitadas e a execução for bem-sucedida, os resultados da consulta terão uma linha por nó de Computação.When informational messages are requested and the execution is successful, the query results will have one line per Compute node.

E.E. Concedendo permissão para executar DBCC FREEPROCCACHEGranting Permission to run DBCC FREEPROCCACHE

O exemplo a seguir fornece ao logon Davi a permissão para executar DBCC FREEPROCCACHE.The following example gives the login David permission to run DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David; 
GO

Consulte TambémSee Also

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