Sto risolvendo problemi di prestazioni su una procedura memorizzata multistatement in SQL Server. Voglio sapere su quali parti dovrei trascorrere del tempo.
Capisco da Come posso leggere il costo della query ed è sempre una percentuale? che anche quando viene detto a SSMS di includere il piano di esecuzione effettivo , le cifre "Costo query (relativo al batch)" sono ancora basate su stime dei costi , che possono essere molto lontane dagli effettivi
Comprendo dalla misurazione delle prestazioni della query: "Costo della query del piano di esecuzione" vs "Tempo impiegato" che posso racchiudere l'invocazione della procedura memorizzata con le SET STATISTICS TIMEistruzioni e quindi otterrò un elenco come questo nel Messagesriquadro:
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.
con un messaggio di output per ogni istruzione.
Posso "facilmente" (anche se non convenientemente) associare l'output delle statistiche temporali ai piani di esecuzione istruzione per istruzione nel riquadro del piano di esecuzione, contandoli: l' SQL Server Execution Timesoutput del quarto messaggio corrisponde a Query 4nel riquadro del piano di esecuzione e così via.
Ma c'è un modo migliore?
DurationeCPUrisultati colonne sono effettivi piuttosto che preventivi, sì?