sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo puedo registrarme y encontrar las consultas más caras?

  1. Use SQL Server Profiler (en el menú de herramientas en SSMS) para crear un seguimiento que registre estos eventos:

     RPC:Completed
     SP:Completed
     SP:StmtCompleted
     SQL:BatchCompleted
     SQL:StmtCompleted
    
  2. Puede comenzar con la plantilla de rastreo estándar y podarla. No especificó si esto era para una base de datos específica o para todo el servidor, si es para bases de datos específicas, incluya la columna DatabaseID y configure un filtro para su base de datos (SELECT DB_ID('dbname') ). Asegúrese de que la columna de datos de Lecturas lógicas esté incluida para cada evento. Establezca el seguimiento para iniciar sesión en un archivo. Si está dejando que este seguimiento se ejecute de forma desatendida en segundo plano, es una buena idea establecer un tamaño máximo de archivo de seguimiento, digamos 500 MB o 1 GB si tiene suficiente espacio (todo depende de cuánta actividad haya en el servidor, así que tendrás que chuparlo y verás).

  3. Inicie brevemente el rastreo y luego póngalo en pausa. Vaya a Archivo->Exportar->Definición de seguimiento de secuencias de comandos, elija su versión de base de datos y guárdela en un archivo. Ahora tiene un script sql que crea un seguimiento que tiene mucha menos sobrecarga que ejecutar a través de la GUI del generador de perfiles. Cuando ejecute este script, generará el ID de rastreo (generalmente @ID=2 ); anota esto.

  4. Una vez que tenga un archivo de seguimiento (.trc) (ya sea el seguimiento completado debido a que alcanzó el tamaño máximo del archivo o detuvo el seguimiento en ejecución usando

    EJECUTIVO sp_trace_setstatus @ID, 0
    EJEC sp_trace_setstatus @ID, 2

Puede cargar el seguimiento en el generador de perfiles, usar ClearTrace (muy útil) o cargarlo en una tabla como esta:

SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)

Luego puede ejecutar una consulta para agregar los datos como este:

SELECT COUNT(*) AS TotalExecutions, 
    EventClass, CAST(TextData as nvarchar(2000))
 ,SUM(Duration) AS DurationTotal
 ,SUM(CPU) AS CPUTotal
 ,SUM(Reads) AS ReadsTotal
 ,SUM(Writes) AS WritesTotal
FROM TraceTable
GROUP BY EventClass, CAST(TextData as nvarchar(2000))
ORDER BY ReadsTotal DESC

Una vez que haya identificado las consultas costosas, puede generar y examinar los planes de ejecución reales.