Diagnóstico de queries lentas

Clase 22 de 26Curso de Gestión de Bases de Datos con SQL Server

Resumen

Cuando alguien reporta que "el sistema está lento", la reacción más común es intentar resolver el problema desde la intuición. Sin embargo, "está lento" no es un diagnóstico, es un síntoma [0:06]. El camino correcto parte de una premisa fundamental: medir primero, analizar después y ajustar con datos reales. Sin medición, cualquier intento de optimización es a ciegas.

¿Cómo activar las estadísticas de una query en SQL Server?

El primer paso para obtener datos concretos sobre el rendimiento de una consulta es activar las estadísticas de tiempo e input/output [0:28]. Esto se logra ejecutando dos comandos simples antes de la query que se desea evaluar:

sql SET STATISTICS TIME ON; SET STATISTICS IO ON;

Una vez activadas, SQL Server registra cuántos recursos consume cada evento de la consulta. Es importante verificar que se esté trabajando en la base de datos correcta, ya sea cambiándola desde la interfaz o mediante el comando USE NombreBaseDeDatos seguido de GO [0:42].

Después de ejecutar la query, los resultados aparecen en la pestaña de mensajes, donde se puede observar:

  • CPU time: tiempo de procesamiento utilizado.
  • Elapsed time: tiempo total de ejecución de la consulta.
  • Lecturas lógicas, lecturas físicas y cantidad de filas escaneadas.

Por ejemplo, si una query toma ciento dos milisegundos, significa que se ejecutó en aproximadamente una décima de segundo, ya que mil milisegundos equivalen a un segundo [2:25].

¿Por qué es necesario apagar las estadísticas después de medir?

Un detalle clave es que las estadísticas deben apagarse después de la ejecución con SET STATISTICS TIME OFF y SET STATISTICS IO OFF [1:39]. Al hacerlo, el mensaje final entrega el tiempo total de ejecución limpio, sin interferencia. Además, las estadísticas activadas afectan el plan de ejecución, que se puede visualizar presionando Control + L [1:15]. Este plan se lee de izquierda a derecha y muestra operaciones como IndexSeek, Nested Loop, filas estimadas, consumo de CPU estimado y tamaño promedio de fila [3:00].

La regla es clara: si no puedes medir, no puedes optimizar [3:23].

¿Qué son las DMVs y cómo ayudan al diagnóstico global del servidor?

Para ir más allá de una sola query y obtener un panorama completo del servidor, se utilizan las DMVs (Dynamic Management Views), que son vistas del sistema que exponen el estado interno de SQL Server [3:42]. Estas vistas no son exclusivas de SQL Server; también están disponibles en otros motores de bases de datos y en plataformas en la nube como Fabric.

La primera DMV útil permite identificar las diez queries que más recursos han consumido desde el último reinicio del servidor [4:05]. Esta consulta hace un cross apply entre tablas de sistema para obtener:

  • Lecturas promedio por consulta.
  • Tiempo promedio en milisegundos.
  • Cantidad de ejecuciones.
  • Consumo de CPU acumulado.

La segunda DMV muestra las queries con más lecturas lógicas [5:00], lo que ayuda a identificar las consultas más demandadas. Ambas vistas ofrecen una fotografía precisa de dónde se concentran los recursos y, por lo tanto, dónde están las oportunidades de optimización.

¿Cómo identificar índices que no se están utilizando?

Uno de los errores más frecuentes es creer que más índices siempre significa mejor rendimiento. Cada índice consume espacio en disco y ralentiza las operaciones de escritura [5:42]. SQL Server registra el uso de cada índice, lo que permite detectar aquellos que no aportan valor.

Mediante una consulta a las estadísticas de uso de índices se puede observar [6:02]:

  • Cantidad de seeks (búsquedas directas).
  • Cantidad de scans (recorridos completos).
  • Cantidad de lookups.
  • Cantidad de actualizaciones.

Un índice con muchas actualizaciones y cero seeks o scans solo está penalizando la escritura sin beneficiar ninguna consulta [6:38]. Ese índice es el primer candidato para ser eliminado.

¿Cuáles son los cinco pasos del ciclo de optimización real?

En la práctica, el proceso de optimización sigue cinco pasos concretos [7:00]:

  1. Identificar las queries más costosas: ejecutar las DMVs para obtener el top cinco por CPU e I/O.
  2. Abrir el plan de ejecución real: buscar table scans, key lookups y ordenamientos costosos.
  3. Verificar advertencias de missing index: crear los índices recomendados donde corresponda.
  4. Medir nuevamente: activar y desactivar las estadísticas para confirmar que las lecturas lógicas se redujeron.
  5. Evaluar índices en uso: determinar si existen índices que se puedan eliminar.

Este ciclo de medir, analizar, ajustar y volver a medir es la base de toda optimización seria [7:50]. Nunca se debe ajustar sin medir primero ni declarar victoria sin medir después. Las lecturas lógicas, los planes de ejecución y las DMVs conforman las tres herramientas fundamentales del diagnóstico sistemático.

En los recursos de la clase encontrarás tres queries para que apliques el análisis completo de cinco pasos. Comparte tus conclusiones en los comentarios.

      Diagnóstico de queries lentas