Compartilhar via


DBCC FREEPROCCACHE (Transact-SQL)

Remove todos os elementos do cache do plano, remove um plano específico do cache do plano, especificando um identificador de plano ou identificador SQL ou remove todas as entradas de cache com um pool de recursos especificado.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

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 limpo no cache do plano, o log de erros do SQL Server conterá a seguinte mensagem informativa: "O SQL Server encontrou %d ocorrência(s) de liberação de armazenamento em cache '% s' (parte do cache do plano) 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.

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

USE AdventureWorks;
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

Conjunto de resultados.

plan_handle                                         texto

--------------------------------------------------  -----------------------------

0x060006001ECA270EC0215D05000000000000000000000000 SELECT * FROM Person.Address;

(1 linha(s) afetada(s))

-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO

B. Apagando todos os planos do cache do plano

O exemplo a seguir apaga 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. Desmarca todas as entradas de cache associadas a um pool de recursos

O exemplo seguinte desmarca todas as entradas de cache associadas a um pool de recursos especificado. A exibição sys.dm_resource_governor_resource_pools é consultada primeiro para obter o valor para pool_name.

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

Histórico de alterações

Conteúdo atualizado

Corrigiu as informações de pool de recursos na introdução e adicionou informações na seção de Argumentos sobre modos de obter informações de nome de pool do Administrador de Recursos.

Exemplo C foi adicionado.