Existe alguma maneira de ignorar os planos de consulta em cache e as páginas de dados na memória para uma única consulta ou lote? Algo como uma dica de tabela ou outra opção que pode ser ativada apenas para a conexão atual?
Quero forçar essa consulta a atingir o disco, porque estou tentando ajustá-la e os tempos de execução estão em todo lugar. Tentando reduzir variáveis em jogo.
Usar a
OPTION (RECOMPILE)
dica de consulta será seu amigo no que diz respeito a forçar um novo plano toda vez que você executar a consulta.Impedir que os dados sejam lidos do cache é impossível. No entanto, você pode limpar o cache, supondo que não esteja usando a máquina de produção para esses testes. A limpeza do cache forçará a leitura dos dados do disco; faça isso antes de executar a consulta todas as vezes. NÃO FAÇA ISSO EM PRODUÇÃO, pois você causará uma queda muito rápida e perceptível no desempenho de todas as consultas executadas no servidor.
Use
DBCC DROPCLEANBUFFERS
para testar consultas com um cache de buffer frio sem desligar e reiniciar o servidor. Você pode querer executar oCHECKPOINT
comando primeiro para garantir que todas as páginas sujas sejam gravadas no disco primeiro.Claramente, você vai querer olhar para os planos de execução reais; faça isso clicando em "Consulta -> Incluir Plano de Execução Real" no menu do SSMS (ou pressione CTRL - Mantes de executar a consulta)
Você também pode ativar
STATISTICS IO, TIME ON
no início da sessão para obter melhores informações de diagnóstico do servidor. Ativar "Estatísticas do cliente" também é uma ótima ferramenta para ver o impacto do SSMS em seus resultados. Clique no menu "Consulta -> Incluir estatísticas do cliente" ou pressioneShift - Alt - sPara não usar planos em cache, você pode adicionar a opção (recompilar) à consulta. Não acho que haja uma opção semelhante para páginas na memória. Você pode usar DBCC DROPCLEANBUFFERS, mas isso limpará todas as páginas no buffer, não apenas para sua consulta. Não execute isso em produção.
Idealmente, você desejaria que todos os dados na memória ajustassem a consulta porque esse é o cenário mais provável, a menos que a consulta esteja lendo dados raramente usados.