Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Banco de dados SQL no Microsoft Fabric
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.
Observação
DBCC FREEPROCCACHE não desmarca as estatísticas de execução para procedimentos armazenados compilados de modo nativo. O cache de procedimentos não contém informações sobre procedimentos armazenados compilados de modo nativo. 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).
Convenções de sintaxe de Transact-SQL
Sintaxe
Sintaxe do SQL Server e do Banco de Dados SQL do Azure:
DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]
Sintaxe para Azure Synapse Analytics e PDW (Analytics Platform System):
DBCC FREEPROCCACHE [ ( COMPUTE | ALL ) ]
[ WITH NO_INFOMSGS ]
[;]
Argumentos
( { 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 é varbinary(64) e pode ser obtido dos seguintes objetos de gerenciamento dinâmico:
- sys.dm_exec_cached_plans
- sys.dm_exec_requests
- sys.dm_exec_query_memory_grants
- sys.dm_exec_query_stats
sql_handle é o identificador SQL do lote a ser apagado. sql_handle é varbinary(64) e pode ser obtido dos seguintes objetos de gerenciamento dinâmico:
- sys.dm_exec_query_stats
- sys.dm_exec_requests
- sys.dm_exec_cursors
- sys.dm_exec_xml_handles
- sys.dm_exec_query_memory_grants
pool_name é o nome de um pool de recursos do Resource Governor. pool_name é sysname e pode ser obtido por meio da consulta da exibição de gerenciamento dinâmico sys.dm_resource_governor_resource_pools.
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. 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.
COM NO_INFOMSGS
Suprime todas as mensagens informativas.
COMPUTE
Limpe o cache de planos de consulta de cada nó de Computação. Este é o valor padrão.
ALL
Limpe o cache de planos de consulta de cada nó de Computação e do nó de Controle.
Observação
Começando pelo SQL Server 2016 (13.x), o ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE pode ser usado para apagar o cache (plano) de procedimento do banco de dados atual.
Comentários
Use DBCC FREEPROCCACHE para limpar o cache de planos cuidadosamente. 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.
Isso pode causar uma queda repentina e temporária no desempenho da consulta conforme o número de novas compilações aumenta. Para cada armazenamento em cache limpo no cache de planos, o log de erros do SQL Server conterá a seguinte mensagem informativa:
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.
Essa mensagem é registrada a cada cinco minutos, contanto que o cache seja liberado dentro desse intervalo de tempo.
As seguintes operações de reconfiguração também são limpas no cache de procedimento:
- contagem de bucket do cache de verificação de acesso
- cota de cache de verificação de acesso
- clr habilitado
- limite de custo para paralelismo
- encadeamento de propriedade do bd cruzado
- memória para criar índice
- grau máximo de paralelismo
- memória máxima do servidor
- tamanho máximo do repl de texto
- máximo de threads de trabalho
- memória mínima por consulta
- memória mínima do servidor
- limite de custo do administrador de consulta
- espera da consulta
- tempo limite de consulta remota
- opções de usuário
No Banco de Dados SQL do Azure, DBCC FREEPROCCACHE atua na instância do mecanismo de banco de dados que hospeda o banco de dados ou o pool elástico atual. A execução de DBCC FREEPROCCACHE em um banco de dados de usuário limpa o cache de planos desse banco de dados. Se o banco de dados estiver em um pool elástico, ele também limpará o cache de planos em todos os outros bancos de dados nesse pool elástico. Executar o comando no banco de dados master não tem nenhum efeito em outros bancos de dados no mesmo servidor lógico. Executar esse comando em um banco de dados usando o objetivo de serviço Básico, S0 ou S1 pode limpar o cache de planos em outros bancos de dados usando esses objetivos de serviço no mesmo servidor lógico.
Conjuntos de resultados
Quando a cláusula WITH NO_INFOMSGS não é especificada, DBCC FREEPROCCACHE retorna o seguinte:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Permissões
Aplica-se a: SQL Server, PDW (Analytics Platform System)
- Exige a permissão ALTER SERVER STATE no servidor.
Aplica-se ao: Banco de Dados SQL do Azure
- Exige a associação na função de servidor ##MS_ServerStateManager##.
Aplica-se a: Azure Synapse Analytics
- Exige a associação na função de servidor fixa db_owner.
Comentários sobre o Azure Synapse Analytics e o Analytics Platform System (PDW)
Vários comandos DBCC FREEPROCCACHE podem ser executados simultaneamente.
No Azure Synapse Analytics ou PDW (Analytics Platform System), 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.
DBCC FREEPROCCACHE (COMPUTE) apenas faz com que o SQL Server recompile consultas quando elas são executadas nos nós de computação. Ele não faz com que o Azure Synapse Analytics ou o Analytics Platform System (PDW) recompile o plano de consulta paralela gerado no nó de controle.
DBCC FREEPROCCACHE pode ser cancelado durante a execução.
Limitações e restrições do Azure Synapse Analytics e do Analytics Platform System (PDW)
DBCC FREEPROCCACHE não pode ser executado em uma transação.
DBCC FREEPROCCACHE não tem suporte em uma instrução EXPLAIN.
Metadados de Azure Synapse Analytics e PDW (Analytics Platform System)
Uma nova linha é adicionada à exibição do sistema sys.pdw_exec_requests quando DBCC FREEPROCCACHE é executado.
Exemplos: SQL Server
a. Apagar um plano de consulta do cache do plano
O exemplo a seguir apaga um plano de consulta do cache do plano especificando o identificador do plano de consulta. Para assegurar que a consulta de exemplo esteja no cache do plano, a consulta será executada primeiro. 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.
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.
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
Veja a seguir o conjunto de resultados.
plan_handle text
-------------------------------------------------- -----------------------------
0x060006001ECA270EC0215D05000000000000000000000000 SELECT * FROM Person.Address;
(1 row(s) affected)
-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO
B. Limpar todos os planos do cache de planos
O exemplo a seguir limpa todos os elementos do cache do plano. A WITH NO_INFOMSGS cláusula é especificada para impedir que a mensagem de informações seja exibida.
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
C. Limpar todas as entradas do cache associadas a um pool de recursos
O exemplo a seguir limpa todas as entradas do cache associadas a um pool de recursos especificado. A exibição sys.dm_resource_governor_resource_pools é consultada primeiro para obter o valor de pool_name.
SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
DBCC FREEPROCCACHE ('default');
GO
Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)
D. Sintaxe básica de DBCC FREEPROCCACHE
O exemplo a seguir remove todos os caches de planos de consulta existentes dos nós de Computação. Embora o contexto seja definido como UserDbSales, os caches de planos de consulta do nó de computação de todos os bancos de dados serão removidos. A cláusula WITH NO_INFOMSGS impede a exibição de mensagens informativas nos resultados.
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.
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.
E. Conceder permissão para executar DBCC FREEPROCCACHE
O exemplo a seguir concede a permissão David de logon para a execução de DBCC FREEPROCCACHE.
GRANT ALTER SERVER STATE TO David;
GO