Estou tentando melhorar o desempenho de um procedimento armazenado. Quando executo o SP, ele termina quase instantaneamente, como se algo estivesse em cache. Disseram-me para usar as duas linhas a seguir do SQL antes de executar o SP no SSMS:
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Quando executo o SP com as duas linhas de código acima, o SP termina em cerca de 8 segundos. No entanto, isso realmente está me dando tempo de execução real (como se eu o executasse em um aplicativo)? Como eu sei?
Respostas:
Esses comandos fazem duas coisas:
Você está basicamente tendo um tempo equivalente ao cenário "pior dos casos" - você acabou de reiniciar o servidor e nada está na memória. Execuções subsequentes não precisam pagar o custo para extrair os dados do disco, pois essas páginas já estão carregadas na memória.
Isso é semelhante a uma situação do mundo real - seu primeiro usuário a executar uma consulta específica provavelmente terá que esperar mais do que nas execuções subsequentes, supondo que você esteja verificando os mesmos dados.
Um bom método que eu gosto de usar é executar várias vezes e fazer uma média. Isso é especialmente útil em um ambiente compartilhado, pois você não tem controle total sobre recursos compartilhados, como tempdb.
Você também pode usar estes comandos para obter mais informações sobre o que realmente está acontecendo nos bastidores:
Isso fornecerá informações detalhadas sobre leituras de páginas do disco (por objeto), leituras lógicas de páginas, tempo gasto na compilação de um plano e tempo gasto na execução de uma consulta.
fonte
GO 5
como no SSMS. É um download gratuito, não estou tentando vender nada. sqlsentry.net/plan-explorer/sql-server-query-view.asp