¿Alguna vez te han pedido que proporciones información sobre consultas o procesos costosos que se están ejecutando en SQL Server? Si es así, es posible que te hayas encontrado con la confusión que rodea la columna de CPU en los resultados. En este artículo, exploraremos lo que realmente representa la columna de CPU y cómo se relaciona con el tiempo de ejecución de la consulta.
Cuando consultas las vistas sys.dm_exec_requests o sys.processes para obtener información sobre las consultas en ejecución, es posible que incluyas columnas como CPU, Memoria y E/S para indicar la utilización. Sin embargo, es importante tener en cuenta que la columna de CPU no indica el porcentaje de CPU como muchos asumen. En cambio, representa la cantidad de tiempo en milisegundos que el proceso ha utilizado la CPU.
Piensa en el tiempo de CPU como un cálculo similar a las “horas hombre” utilizadas en el mundo corporativo. Si dos personas trabajan durante 1 hora cada una, el total de horas hombre gastadas es de 2 horas. De manera similar, el tiempo de CPU representa la cantidad de tiempo que todos los procesadores han pasado ejecutando una consulta. Sin embargo, no refleja el tiempo exacto de ejecución de la consulta debido a varios factores.
Un factor a tener en cuenta es que una consulta puede estar esperando otros recursos, como la liberación de un bloqueo. Durante esta espera, la consulta no consume tiempo de CPU, aunque pueda estar en ejecución durante mucho tiempo. Otros ejemplos de esperas que no implican procesamiento de CPU incluyen esperas de latch y esperas de red.
Además, el tiempo de CPU representa el tiempo que han pasado todos los procesos, similar a las “horas hombre”. Si una consulta utiliza procesamiento paralelo o consume múltiples procesadores, el tiempo de CPU devuelto por sys.processes o sys.dm_exec_requests será mucho mayor que el tiempo de ejecución real de la consulta. Por ejemplo, si una consulta se ejecuta en los procesadores p1 y p2, el tiempo de CPU será igual a la suma del tiempo consumido en ambos procesadores.
Entonces, ¿qué podemos inferir del campo de tiempo de CPU? Podemos entender que las consultas con el mayor tiempo de CPU han hecho que el procesador trabaje más y es probable que hayan causado estrés en el servidor. Sin embargo, es importante tener en cuenta que el tiempo de CPU está relacionado con el tiempo de ejecución real de la consulta, pero no es una representación exacta.
La próxima vez que alguien te pregunte sobre la columna de CPU en los resultados de la consulta, puedes explicar con confianza que representa la cantidad de tiempo que el proceso ha utilizado la CPU, no el porcentaje de CPU. Al comprender este concepto, puedes proporcionar información más precisa sobre la utilización de recursos de las consultas en ejecución en SQL Server.