Ao comparar o tempo de execução de duas consultas diferentes, é importante limpar o cache para garantir que a execução da primeira consulta não altere o desempenho da segunda.
Em uma Pesquisa do Google, eu pude encontrar estes comandos:
DBCC FREESYSTEMCACHE
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE
De fato, minhas consultas estão demorando mais para serem concluídas após várias execuções do que antes. No entanto, não tenho certeza se essa é a técnica recomendada.
Qual é a melhor prática?
fonte
DBCC FLUSHPROCINDB
Ocorreu um erro ao executar : Um número incorreto de parâmetros foi fornecido à instrução DBCC.DECLARE @myDb AS INT = DB_ID(); DBCC FLUSHPROCINDB(@myDb); GO
daqui: stackoverflow.com/questions/7962789/…Resposta tardia, mas pode ser útil para outros leitores
DBCC DROPCLEANBUFFERS é um comando frequentemente usado para testar e medir a velocidade de execução de consultas. Este comando (quando executado) deixa para trás apenas as páginas sujas, que na verdade são uma pequena parte dos dados. Remove todas as páginas limpas de um servidor inteiro.
Esteja ciente de que este comando não deve ser executado no ambiente de produção. A execução desse comando resultará em um cache de buffer quase vazio. A execução de qualquer consulta após a execução do comando DBCC DROPCLEANBUFFERS, utilizará leituras físicas para trazer de volta os dados para o cache, o que provavelmente será muito mais lento que a memória.
Mais uma vez, trate esse comando da mesma forma que o DBCC FREEPROCCACHE - ele não deve ser executado em nenhum servidor de produção, a menos que você saiba absolutamente o que está fazendo.
Essa pode ser uma ferramenta de desenvolvimento útil, pois você pode executar uma consulta em um ambiente de teste de desempenho repetidamente, sem alterações na velocidade / eficiência devido ao armazenamento em cache de dados na memória.
Saiba mais em: http://www.sqlshack.com/insight-into-the-sql-server-buffer-cache/
fonte
Sempre me disseram para usar:
Do MSDN :
fonte
DBCC FREEPROCCACHE
para limpar os planos de execução em cache ...As outras respostas estão corretas sobre os motivos para não executar
DBCC FREEPROCCACHE
. No entanto, também existem alguns motivos para fazê-lo:Se você deseja comparar duas consultas ou procedimentos diferentes que estão tentando fazer a mesma coisa de maneiras diferentes, é provável que cheguem às mesmas páginas. Se você executar ingenuamente a consulta nº 1 e a consulta nº 2, a segunda poderá ser muito mais rápida, simplesmente porque essas páginas foram armazenadas em cache pela primeira consulta. Se você limpar o cache antes de cada execução, eles começarão em pé de igualdade.
Se você quiser testar o desempenho do cache quente, execute as consultas várias vezes, alternando e descartando as primeiras execuções. Média dos resultados.
Digamos que você tenha uma consulta que leva um segundo em um cache quente, mas um minuto em um cache frio. Uma otimização que torna a consulta na memória 20% mais lenta, mas a consulta vinculada à IO 20% mais rápida pode ser uma grande vitória: durante operações normais, ninguém notará os 200 ms extras em circunstâncias normais, mas se algo forçar uma consulta a executar no disco, levar 48 segundos em vez de 60 pode salvar uma venda.
Isso é menos preocupante em sistemas modernos com dezenas de gigabytes de memória e armazenamento relativamente rápido de SAN e SSD, mas ainda importa. Se algum analista executar uma consulta massiva de varredura de tabela no banco de dados OLTP, que elimina metade do cache do buffer, as consultas eficientes em armazenamento permitirão que você recupere a velocidade mais rapidamente.
fonte