Estou corrigindo problemas de desempenho em um procedimento armazenado com várias instruções no SQL Server. Quero saber em quais partes devo gastar tempo.
Entendo em Como leio o Custo de consulta e é sempre uma porcentagem? que mesmo quando o SSMS é instruído a incluir o plano de execução real , os números "Custo da consulta (relativo ao lote)" ainda são baseados em estimativas de custo , que podem estar longe dos valores reais
Entendo, Medindo o desempenho da consulta: "Custo da consulta do plano de execução" vs "Tempo decorrido", que posso cercar a invocação do procedimento armazenado com SET STATISTICS TIME
instruções e, em seguida, receberei uma lista como esta no Messages
painel:
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
[etc]
SQL Server Execution Times:
CPU time = 187 ms, elapsed time = 206 ms.
com uma mensagem de saída para cada instrução.
Posso 'facilmente' (embora não seja conveniente) associar a saída de estatísticas de tempo aos planos de execução de declaração por instrução no painel Plano de execução, contando-os: A quarta SQL Server Execution Times
saída de mensagem corresponde a Query 4
no painel Plano de execução e assim por diante.
Mas existe uma maneira melhor?
Duration
eCPU
resultados são reais e não estimativas, sim?