Saltar al contenido
DBAExperts
SQL Server Diagnóstico

Cómo encontrar consultas lentas en SQL Server (Query Store y DMVs)

Antes de optimizar hay que medir. Con Query Store y las DMVs identificas exactamente que consultas consumen mas CPU, IO o tiempo.

  1. 1

    Activa Query Store

    Query Store guarda historial de consultas y planes. Es la herramienta mas practica desde SQL Server 2016. Actívalo por base de datos.

    ALTER DATABASE [MiBase] SET QUERY_STORE = ON
         (OPERATION_MODE = READ_WRITE);
  2. 2

    Encuentra las consultas mas costosas con Query Store

    Consulta las vistas del Query Store para ver las consultas por duracion, CPU o lecturas. Tambien las tienes en el reporte grafico en SSMS.

    SELECT TOP 20
      qt.query_sql_text,
      rs.avg_duration / 1000.0 AS avg_ms,
      rs.avg_cpu_time / 1000.0 AS avg_cpu_ms,
      rs.count_executions
    FROM sys.query_store_query_text qt
    JOIN sys.query_store_query q ON qt.query_text_id = q.query_text_id
    JOIN sys.query_store_plan p ON q.query_id = p.query_id
    JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
    ORDER BY rs.avg_duration DESC;
  3. 3

    Alternativa sin Query Store: sys.dm_exec_query_stats

    Muestra estadisticas de consultas en la cache de planes. Se reinicia al limpiar la cache o reiniciar el servidor, asi que es una foto del momento.

    SELECT TOP 20
      qs.total_worker_time / qs.execution_count AS avg_cpu,
      qs.total_elapsed_time / qs.execution_count AS avg_duracion,
      qs.execution_count,
      SUBSTRING(st.text, (qs.statement_start_offset/2)+1, 200) AS consulta
    FROM sys.dm_exec_query_stats qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
    ORDER BY avg_cpu DESC;
  4. 4

    Revisa el plan de ejecucion

    El plan te dice donde esta el problema: scans de tabla completa, spills a tempdb, estimaciones erradas o falta de indices. En SSMS activa 'Include Actual Execution Plan' (Ctrl+M).

    -- Obten el plan estimado sin ejecutar
    SET SHOWPLAN_XML ON;
    GO
    SELECT * FROM dbo.Ventas WHERE ClienteID = 123;
    GO
    SET SHOWPLAN_XML OFF;

// el error común

sys.dm_exec_query_stats solo ve lo que sigue en cache: consultas recientes o con RECOMPILE pueden no aparecer. El plan estimado puede diferir del real por estimaciones de cardinalidad malas. Compara siempre el plan actual (real) cuando puedas.

// cuándo conviene un experto

Interpretar planes de ejecucion y decidir el fix (indice, reescritura, estadisticas, hints) requiere experiencia. En dba.mx hacemos diagnostico de rendimiento con Query Store y planes reales, y entregamos las mejoras con techo cerrado.

Agenda un Escaneo — desde USD $550

Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.