CPU y duración con SET STATISTICS TIME

Una consulta lenta no necesariamente mantiene ocupado al procesador durante todo ese tiempo. SET STATISTICS TIME separa el trabajo de CPU del tiempo transcurrido y también informa cuánto tardaron el análisis y la compilación.

Activar la medición

La opción se habilita en la sesión actual y escribe sus resultados en Messages:

SET STATISTICS TIME ON;

SELECT SUM(CONVERT(DECIMAL(38, 4), p.Total * f.Factor)) AS TotalCalculado
FROM dbo.PedidoLaboratorio AS p
CROSS JOIN
(
    VALUES (1), (2), (3), (4), (5), (6), (7), (8)
) AS f(Factor)
OPTION (MAXDOP 1, RECOMPILE);

SET STATISTICS TIME OFF;

Ejecuta el bloque completo con F5 y abre la pestaña Messages. La cuadrícula Results contiene el valor calculado, pero los tiempos aparecen en Messages bajo SQL Server parse and compile time y SQL Server Execution Times.

Las cifras cambian entre ejecuciones y equipos. Lo reproducible es la ubicación y la separación entre compilación, CPU y tiempo transcurrido, no los milisegundos exactos de la captura.

ON permanece activo para las instrucciones posteriores de la misma conexión. Conviene ejecutar OFF al terminar para que la pestaña Messages no mezcle mediciones de consultas distintas.

La consulta de esta prueba agrega cálculos deliberadamente y devuelve una sola fila. MAXDOP 1 limita esta ejecución a un trabajador para hacer más directa la primera lectura de CPU y duración; no es una recomendación general para consultas empresariales.

La salida separa compilación y ejecución

Mensajes de SET STATISTICS TIME con compilación, CPU y duración

  1. 1
    Análisis y compilación

    SQL Server parse and compile time registra el trabajo previo a ejecutar la instrucción. Los valores de esta prueba fueron de 0 y 1 ms.

  2. 2
    Cálculo controlado

    SQL Server Execution Times informa 515 ms de CPU y 572 ms transcurridos para la consulta que realiza el cálculo.

  3. 3
    Espera controlada

    La instrucción WAITFOR informa 0 ms de CPU y 1010 ms transcurridos. El procesador no estuvo trabajando durante la mayor parte de esa espera.

Los mensajes de validación y otras instrucciones del lote también pueden producir grupos con valores cercanos a cero. Para interpretar una medición hay que relacionar cada bloque con la instrucción que lo precede.

parse and compile time: preparar la estrategia

Antes de ejecutar una consulta, SQL Server debe analizar el texto y disponer de un plan. parse time corresponde al análisis sintáctico; compile time reúne el trabajo necesario para compilar u optimizar la instrucción.

Un valor de 0 ms no demuestra que no ocurrió trabajo. Puede indicar que fue menor que la resolución del contador, que la instrucción era sencilla o que ya existía una estrategia reutilizable. En esta prueba se utiliza RECOMPILE para obtener una compilación controlada, no como recomendación para todas las consultas.

CPU time: trabajo acumulado del procesador

CPU time suma el tiempo durante el cual los trabajadores de la consulta utilizaron procesador. No incluye el tiempo en que permanecieron detenidos esperando datos, memoria, bloqueos u otros recursos.

Aquí la consulta queda limitada a un solo trabajador y registra 515 ms de CPU. En un plan paralelo varios trabajadores pueden utilizar CPU al mismo tiempo; como el contador acumula su trabajo, el total de CPU puede superar el tiempo transcurrido.

elapsed time: tiempo de principio a fin

elapsed time mide el tiempo de reloj desde que comienza la ejecución hasta que termina. Incluye el trabajo de CPU y los periodos en que la consulta no avanza porque espera programación, almacenamiento, bloqueos u otros recursos.

El cálculo registra 572 ms transcurridos frente a 515 ms de CPU. Esa cercanía describe esta ejecución, pero no identifica por sí sola dónde se empleó cada milisegundo ni permite extrapolar el resultado a otra carga.

Una espera puede durar sin consumir CPU

La segunda instrucción aísla esa diferencia:

WAITFOR DELAY '00:00:01';

La espera dura aproximadamente un segundo y registra 0 ms de CPU. WAITFOR se utiliza aquí únicamente como contraste didáctico; no representa una técnica de optimización ni una forma de simular toda la variedad de esperas que puede encontrar una consulta real.

Una diferencia amplia entre duración y CPU indica que hubo tiempo sin uso activo del procesador por parte de la consulta. Para conocer la causa todavía hacen falta otras evidencias, como esperas, bloqueos, lecturas y el plan de ejecución.

Una ejecución no establece una tendencia

La duración puede cambiar por el estado de la caché, la compilación, los parámetros, el plan elegido, la actividad concurrente y los recursos disponibles. La primera ejecución sirve para observar; no basta para declarar una mejora o una regresión.

Una comparación útil conserva la consulta, los parámetros y las condiciones relevantes, repite la medición y registra la variación. También separa el tiempo del servidor del tiempo adicional que puede percibir una aplicación al transferir y procesar resultados.

Qué podemos concluir

En esta prueba, el cálculo empleó 515 ms de CPU durante 572 ms transcurridos. La espera controlada empleó 0 ms de CPU durante 1010 ms transcurridos. Los valores muestran que CPU y duración responden preguntas distintas; todavía no explican por sí solos la causa de un problema de rendimiento.

Siguiente comprobación razonable

La siguiente entrada construye una línea base repetible: conserva las condiciones de la prueba, reúne varias ejecuciones y compara una sola variable a la vez.

Relacionado con

Índice del recorrido

Planes de ejecución

30 artículos de Planes de ejecución
  1. 01Para qué sirve un plan de ejecución
  2. 02Plan estimado, plan real y estadísticas en vivo
  3. 03Cómo se organiza el árbol de un plan de ejecución
  4. 04Flechas, propiedades y número de ejecuciones
  5. 05Mapa de operadores: qué papel cumple cada nodo
  6. 06Filas estimadas y filas reales
  7. 07Index Seek, Index Scan y Table Scan
  8. 08Key Lookup y trabajo repetido
  9. 09Filter, Compute Scalar y Top
  10. 10Nested Loops, Hash Match y Merge Join
  11. 11Sort, Segment y Sequence Project
  12. 12Stream Aggregate y Hash Match (Aggregate)
  13. 13Spool: materialización y reutilización
  14. 14Parallelism: distribuir, repartir y reunir filas
  15. 15Advertencias del plan que requieren investigación
  16. 16Acciones disponibles en el plan gráfico de SSMS
  17. 17Cómo se organiza el XML Showplan
  18. 18Recorrer Analyze Actual Execution Plan
  19. 19Lecturas con SET STATISTICS IO
  20. 20CPU y duración con SET STATISTICS TIME
  21. 21Construir una línea base repetible
  22. 22Guardar y comparar dos planes
  23. 23Historial y regresiones con Query Store
  24. 24Convertir un escenario de Analyze Actual Execution Plan en una hipótesis
  25. 25Leer una sugerencia Missing Index en el plan
  26. 26Entender el CREATE INDEX generado por SSMS
  27. 27Decidir, crear y comprobar un índice
  28. 28De una consulta lenta a una hipótesis comprobable
  29. 29Evaluar un cambio sin optimizar solo una ejecución
  30. 30Análisis guiado de una consulta empresarial reproducible