DBCC FREEPROCCACHE (Transact-SQL)
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.
Convenções de sintaxe Transact-SQL
Sintaxe
DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]
Argumentos
( { plan_handle | sql_handle | pool_name } )
plan_handle identifica exclusivamente um plano de consulta de um lote executado cujo plano reside no cache do plano. plan_handle é varbinary(64) e pode ser obtido nos seguintes objetos de gerenciamento dinâmico:sql_handle é o identificador SQL do lote a ser apagado. sql_handle é varbinary(64) e pode ser obtido nos seguintes objetos de gerenciamento dinâmico:
pool_name é o nome de um pool de recursos do Administrador de Recursos. 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 Administrador de Recursos 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.
WITH NO_INFOMSGS
Suprime todas as mensagens informativas.
Comentários
Use DBCC FREEPROCCACHE para limpar o cache do plano cuidadosamente. Por exemplo, liberar o cache do plano faz com que um procedimento armazenado seja recompilado em vez de reutilizado no cache. Isso pode causar uma diminuição súbita e temporária no desempenho de consulta. Para cada armazenamento em cache eliminado do cache de planos, o log de erros do SQL Server contém a seguinte mensagem informativa: "O SQL Server encontrou %d ocorrências de liberação de armazenamento no cache '%.s' (parte do cache de planos) devido às operações 'DBCC FREEPROCCACHE' ou 'DBCC FREESYSTEMCACHE'." 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 limpam o cache de procedimento:
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
opções de usuário
Conjuntos de resultados
Quando a cláusula WITH NO_INFOMSGS não estiver especificada, DBCC FREEPROCCACHE retornará:
"A execução do DBCC foi concluída. Se o DBCC imprimiu mensagens de erro, entre em contato com o administrador do sistema".
Permissões
Requer a permissão ALTER SERVER STATE no servidor.
Exemplos
A.Apagando 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 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.
plan_handle text
-------------------------------------------------- -----------------------------
0x060006001ECA270EC0215D05000000000000000000000000 SELECT * FROM Person.Address;
(1 row(s) affected)
-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO
B.Limpando todos os planos do cache do plano
O exemplo a seguir limpa todos os elementos do cache do plano. A cláusula WITH NO_INFOMSGS é especificada para impedir a exibição da mensagem informativa.
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
C.Limpando 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