Estoy solucionando problemas de rendimiento en un procedimiento almacenado de varias declaraciones en SQL Server. Quiero saber en qué parte (s) debo pasar el tiempo.
Comprendo ¿Cómo leo el costo de la consulta? ¿Es siempre un porcentaje? que incluso cuando se le dice al SSMS que incluya un plan de ejecución real , las cifras del "costo de la consulta (en relación con el lote)" todavía se basan en estimaciones de costos , que pueden estar muy lejos de los reales
Por Medición del rendimiento de la consulta: "Costo de la consulta del plan de ejecución" frente a "Tiempo de espera" , puedo rodear la invocación del procedimiento almacenado con SET STATISTICS TIME
declaraciones, y luego obtendré una lista como esta en el Messages
panel:
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 mensaje de salida para cada declaración.
Puedo 'fácilmente' (aunque no convenientemente) asociar el resultado de las estadísticas de tiempo con los planes de ejecución de declaración por declaración en el panel del plan de ejecución, contándolos: el cuarto SQL Server Execution Times
mensaje de salida corresponde al Query 4
panel del plan de ejecución, y así sucesivamente.
Pero hay una manera mejor?
Duration
yCPU
resultados son reales en lugar de estimaciones, ¿sí?