quinta-feira, 24 de janeiro de 2019

SQL SERVER – Clear Cache plan, para um único banco de dados.



Durante a nossa analise do desempenho do banco de dados, implementamos algumas melhorias mais complexas que, chegamos ao ponto em que precisávamos reiniciar o cache do servidor, para analisar como nossas alterações seriam aplicadas e seu comportamento.

Enquanto estávamos discutindo sobre reiniciar ou não os servidores, o desenvolvedor da organização, imediatamente correu para o Management Studio (SSMS) e escreveu o seguinte comando.


1
DBCC FREEPROCCACHE --não execute isso rs ...


Neste momento solicitamos para parar imediatamente, e explicamos que se ele executasse o comando acima no servidor, ele descartaria o cache do plano para TODOS o banco de dados no servidor e isso é algo não recomendado. Se o cache for descartado para todo o servidor, durante o horário comercial, o SQL Server estará sob pressão para recriar todos os planos e também poderá afetar negativamente o desempenho. Como havíamos feito melhorias em um único banco de dados e nossa necessidade era limpar o cache para um único banco de dados não seria necessário reiniciar completamente todo o cache, portanto, executamos pontualmente para remover os planos em cache para um único banco de dados.
1
2
3
USE DatabaseToClearCache;
DECLARE @dbid INT = DB_ID();
DBCC FLUSHPROCINDB (@dbId);


Se vocês estiverem usando o SQL Server 2016 ou versão superior (uaaaaaAAAAAAalll rs), também poderá executar o seguinte comando:

1
2
USE DatabaseToClearCache;
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE


Bem, é isso. É muito simples remover o cache de um único banco de dados, sugiro fortemente que você o faça apenas nas condições extremas, pois na maioria dos casos, você não precisa dele. E podem causar problemas de performance pontual de acordo com a disponibilidade e performance desta base.