Medir el tiempo de ejecución en SQL Server

Publicado el 01 julio 2022 por Daniel Rodríguez @analyticslane

Saber el tiempo necesario para realizar una tarea es clave a la hora de optimizar un proceso. Siendo la mejor estrategia centrarse en mejorar el rendimiento de aquellas actividades que requieren más tiempo, ya que estas son las que más van a afectar al resultado final. Algo que también se aplica a las bases de datos. Por lo que, conocer el tiempo de ejecución en SQL Server de las consultas realizadas es algo que puede ser de gran ayuda a la hora de mejorar nuestros procesos de análisis.

Obtener el tiempo de ejecución en SQL Server

En SQL Server existe la opción de activar un modo en el que se muestra el tiempo en milisegundos necesarios para analizar, compilar y ejecutar las diferentes consultas que se ejecuten. Al activar este modo la información del tiempo se agrega en los mensajes que devuelve el motor de base de datos. Modo que se puede activar con la instrucción SET STATISTICS TIME ON. Una vez que se ha obtenido la información necesaria este modo se puede desactivar con el comando SET STATISTICS TIME OFF

Por ejemplo, ejecutando el siguiente código se puede ver el tiempo que tarda cada una de las consultas diferentes sobre una misma tabla.

set statistics time on 

SELECT first_name, last_name, email, total_billing FROM clients WHERE total_billing > 5000;

SELECT first_name, last_name, email, total_billing FROM clients WHERE shirt_size = 'XL';

set statistics time off
Tiempo de análisis y compilación de SQL Server: 
   Tiempo de CPU = 0 ms, tiempo transcurrido = 0 ms.

(490 rows affected)

 Tiempos de ejecución de SQL Server:
   Tiempo de CPU = 0 ms, tiempo transcurrido = 119 ms.
Tiempo de análisis y compilación de SQL Server: 
   Tiempo de CPU = 0 ms, tiempo transcurrido = 0 ms.

(151 rows affected)

 Tiempos de ejecución de SQL Server:
   Tiempo de CPU = 0 ms, tiempo transcurrido = 85 ms.

En base a los resultados se puede ver como la primera consulta (119 ms) es más lenta que la segunda (85 ms). Aunque, dado que ambas son operaciones extremadamente simples sobre una tabla sencilla, la diferencia entre ambas es prácticamente despreciable.

Medir la actividad de disco en SQL Server

Otra opción que se puede activar en SQL Server es la medición de la actividad de disco a la hora de realizar una consulta. Al igual que el caso anterior, este es un modo que se puede activar ejecutando una instrucción. En concreto para su activación se debe ejecutar SET STATISTICS IO ON y para la desactivación SET STATISTICS IO OFF. Un modo que se puede aplicar sobre las consultas del ejemplo anterior.

set statistics io on 

SELECT first_name, last_name, email, total_billing FROM clients WHERE total_billing > 5000;

SELECT first_name, last_name, email, total_billing FROM clients WHERE shirt_size = 'XL';

set statistics io off
(490 rows affected)
Tabla "clients". Número de examen 1, lecturas lógicas 18, lecturas físicas 0, lecturas de servidor de páginas 0, lecturas anticipadas 0, lecturas anticipadas de servidor de páginas 0, lecturas lógicas de línea de negocio 0, lecturas físicas de línea de negocio 0, lecturas de servidor de páginas de línea de negocio 0, lecturas anticipadas de línea de negocio 0, lecturas anticipadas de servidor de páginas de línea de negocio 0.

(151 rows affected)
Tabla "clients". Número de examen 1, lecturas lógicas 18, lecturas físicas 0, lecturas de servidor de páginas 0, lecturas anticipadas 0, lecturas anticipadas de servidor de páginas 0, lecturas lógicas de línea de negocio 0, lecturas físicas de línea de negocio 0, lecturas de servidor de páginas de línea de negocio 0, lecturas anticipadas de línea de negocio 0, lecturas anticipadas de servidor de páginas de línea de negocio 0.

En este caso se puede ver que en ambos casos se realiza el mismo número de lecturas en ambos casos, ya que se obtiene la información de la misma tabla, pero con diferentes condiciones. Siendo en ambos casos todas las lecturas son lógicas, datos leídos desde la caché, y ninguna física, datos leídos desde el disco.

Conclusiones

A la hora de depurar procesos en bases de datos saber cuál es el tiempo de ejecución y los recursos necesarios de una consulta es algo clave. Para eso conocer las opciones que ofrece una base de datos como SQL Server para medir el tiempo y la actividad de disco es algo que puede ser de mucha ayuda en nuestro trabajo.

Imagen de anncapictures en Pixabay