¿Cómo puedo iniciar sesión y encontrar las consultas más caras?
El monitor de actividad en sql2k8 nos permite ver las consultas más caras. Ok, eso está bien, pero ¿hay alguna manera de registrar esta información u obtenerla a través del analizador de consultas? Realmente no quiero tener la consola de administración Sql abierta y yo mirando el panel del monitor de actividad.
Quiero averiguar qué consultas están mal escritas, qué esquemas están mal diseñados, etc.
¡Muchas gracias por cualquier ayuda!
Utilice SQL Server Profiler (en el menú de herramientas de SSMS) para crear un seguimiento que registre estos eventos:
RPC:Completed SP:Completed SP:StmtCompleted SQL:BatchCompleted SQL:StmtCompleted
Puede comenzar con la plantilla de seguimiento 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 establezca 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. Configure el seguimiento para iniciar sesión en un archivo. Si deja que este seguimiento se ejecute desatendido 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, por lo que tendrás que chuparlo y ver).Inicie brevemente el seguimiento y luego pausarlo. Vaya a Archivo->Exportar->Definición de seguimiento de script, 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 ejecutarlo a través de la GUI del generador de perfiles. Cuando ejecute este script, generará el ID de seguimiento (normalmente
@ID=2
); anota esto.Una vez que tenga un archivo de seguimiento (.trc) (ya sea el seguimiento completado debido a que alcanzó el tamaño máximo de archivo o detuvo el seguimiento en ejecución usando
EXEC sp_trace_setstatus @ID, 0
EXEC 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 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.
El siguiente script le proporciona el resultado.
SELECT TOP 10
SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads,
qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC
Nunca antes había oído hablar de esta herramienta, pero Microsoft proporciona un conjunto de informes que hacen un trabajo fantástico al brindarle exactamente esto, incluidas las consultas más lentas. Consulte sus informes del panel de rendimiento .
No estoy seguro de si son compatibles con SQL 2008, pero vale la pena echarles un vistazo.
¿El SQL Server Profiler haría lo que necesita? Todavía no he usado 2008, así que no sé si la herramienta todavía está ahí, pero si lo está, creo que se puede configurar un seguimiento para registrar consultas que cumplan con criterios específicos (como aquellas que se ejecutan y controlan la CPU arriba). un umbral determinado).
Hemos usado esto en nuestro proyecto e hizo un buen trabajo al ayudarnos a solucionar problemas de consultas que se ejecutan de manera deficiente (aunque no lo deje activado a tiempo completo, confíe en los contadores de rendimiento generales de Windows para realizar un seguimiento del estado del rendimiento).