DBCC FreeProcCache

 Download PDF

SteveStedman.com, o comando DBCC de hoje é DBCC FREEPROCCACHE.

Description:

DBCC FREEPROCCACHE is used for purge all of the parsed query plans out of memory. Isto é comumente usado em ambientes de desenvolvimento, mas não tão comum em um ambiente de produção.

o uso em um ambiente de desenvolvimento é comum, por exemplo, quando você está trabalhando em ajuste de desempenho, ou parametrização de consultas. Você pode limpar o cache do procedimento com o FreeProcCache DBCC, executar o programa ou página web que pode estar usando o banco de dados, em seguida, ver o que está no cache do procedimento. Isso pode ser útil para encontrar consultas que podem precisar ser parametrizadas. Outra maneira de usar seria descobrir quais consultas estão sendo realizadas por algum programa. Para fazer isso você deve começar por trabalhar com um banco de dados que não está sendo usado por outras pessoas, limpar o cache de procedimento com o comando DBCC FreeProcCache, em seguida, execute o programa que você está tentando descobrir, em seguida, olhar para o que está na cache, novamente, isso é algo que poderia ser feito em um ambiente de desenvolvimento ou teste, mas eu não recomendo fazê-lo em produção.

o uso em um ambiente de produção deve ser raro, esta é uma das coisas comuns a tentar quando o servidor SQL está tendo dificuldade. Se você é o ponto que o servidor SQL é extremamente lento para responder e você não foi capaz de encontrar a causa, uma coisa a tentar é liberar o cache do procedimento com o FreeProcCache DBCC e ver se isso corrige o problema.

DBCC Freeproccache sintaxe:

dbcc freeproccache

exemplo:

o seguinte exemplo é de um envioronment de desenvolvimento utilizando a base de dados AdventureWorks2012.

primeiro nos conectamos a AdventureWorks2012 e vemos o que está no cache.

USE AdventureWorks2012;GOSELECT size_in_bytes, text FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st;

DBCC_FreeProcCache1
aqui vemos que há muito no tesouro. Em seguida, nós limpamos o cache com DBCC FreeProcCache e dar outra olhada no que está no cache.

DBCC FREEPROCCACHE;SELECT size_in_bytes, text FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st;

depois de executar o FreeProcCache DBCC você pode ver que não há mais nada no cache.
DBCC_FreeProcCache2 quando a próxima consulta é executada, ela precisa ser reparada ao invés de usar uma consulta já processada no cache. Isto vai demorar um pouco mais do que se já houvesse um plano analisado para executar. Vamos executar três consultas, em seguida, dar uma olhada no cache.

GOSELECT FirstName, MiddleName, LastName FROM person.Person p WHERE FirstName like 'John';GOSELECT FirstName, MiddleName, LastName FROM person.Person p WHERE FirstName like 'Mary';GOSELECT FirstName, MiddleName, LastName FROM person.Person p WHERE FirstName like 'Bill';

Notice the GO Statement between each query. Isto diz ao SSMS para executar cada consulta como um lote separado. Sem a declaração GO as 3 consultas teriam sido processadas como um único lote.
DBCC_FreeProcCache3
aqui vemos os resultados das três consultas. Os dois primeiros resultados retornados, e o terceiro não tinha linhas no conjunto de resultados. Agora vamos dar uma olhada no cache

SELECT size_in_bytes, text FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st;

abaixo vemos um total de 20 itens no cache agora. o item superior destacado em azul é a consulta que usamos para ver o que estava no cache, o segundo bloco destacado em vermelho contém as 3 consultas de cima, e o terceiro deles são consultas que estão sendo executadas por SQL ou outras consultas de suporte. Por exemplo, a linha 13 é o dm_exec_sql_text que é chamado a partir da consulta acima que verifica o plano.DBCC_FreeProcCache4

se quiséssemos filtrar isto apenas para as consultas que tínhamos escrito, você poderia fazê-lo adicionando uma cláusula onde texto como … para a consulta Como mostrado aqui.

SELECT size_in_bytes, text FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS stWHERE text LIKE N'SELECT FirstName%';

aqui vemos que apenas as três consultas aparecem, e que cada uma dessas três ocupa cerca de 40K de memória no servidor SQL. DBCC_FreeProcCache5 então por que existem três cópias da mesma declaração selecionada, isso parece um pouco desperdiçado. De fato, ele faz, para mais informações, ver um post anterior chamado quanto tempo de memória de Cache procedimento é que uma declaração SQL ocupa? Há maneiras de corrigir isto.

usando o FreeProcCache DBCC para um plano específico lidar com

se você quisesse limpar apenas um plano lidar, e não todos os manípulos do plano, você poderia usar o parâmetro opcional chamado @handle.

para obter o manejo do plano, começamos por modificar a nossa consulta anterior para nos mostrar o que está no cache do plano. Pode deixar de fora a cláusula “onde” no seu próprio sistema, mas tenho-a aqui para nos mostrar apenas as três perguntas em questão vindas de cima.

SELECT size_in_bytes, text, plan_handle FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS stWHERE text LIKE N'SELECT FirstName%';

DBCC_FreeProcCache7

aqui vemos os mesmos três planos de consulta anteriores, com uma coluna de adição chamada plan_handle. Para liberar um único manejo de plano, nós apenas copiaríamos o manejo de plano numérico, e adicionaríamos isso à consulta DBCC FreeProcCache.

DBCC FREEPROCCACHE(0x060007000100FF3310B8DA7D0600000001000000000000000000000000000000000000000000000000000000);SELECT size_in_bytes, text, plan_handle FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS stWHERE text LIKE N'SELECT FirstName%';

DBCC_FreeProcCache8

onde só vemos 2 das três consultas originais no cache do plano.

quão grande é o meu esconderijo de procedimentos?

pode executar a seguinte consulta para verificar o tamanho da sua ‘cache’ de procedimentos.

SELECT count(*) AS NumPlans, objtype as Type,SUM(size_in_bytes)/(1024.0*1024.0) AS size_in_mbFROM sys.dm_exec_cached_plansGROUP BY objtype;

que produz os seguintes resultados no meu servidor de teste.

DBCC_FreeProcCache9

relatórios de Saúde da Base de dados e a Cache do Plano

você também pode ver a cache do plano usando a aplicação de relatórios de Saúde da Base de dados como mostrado aqui.

DBCC_FreeProcCache10

notas:

para mais informações veja TSQL Wiki DBCC freeproccache.

mês de comando DBCC em SteveStedman.com é quase tão divertido como comer gelatina.


SteveStedman5
Steve and the team at Stedman Solutions are here for all your SQL Server needs.Contacta-nos hoje para a tua consulta gratuita de 30 minutos..Estamos prontos para ajudar!



+