sql-server - studio - ver usuarios conectados en sql server 2008
¿Cómo puedo iniciar sesión y encontrar las consultas más caras? (6)
Use el Analizador de SQL Server (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
Puede comenzar con la plantilla de rastreo estándar y podarla. No especificó si esto era para una base de datos específica o el servidor completo, si es para Db específicos, incluye la columna DatabaseID y establece un filtro para su DB (
SELECT DB_ID(''dbname'')
). Asegúrese de que la columna de datos de Lectura lógica esté incluida para cada evento. Establezca el seguimiento para iniciar sesión en un archivo. Si deja este rastro para ejecutar desatendido en el fondo, es una buena idea establecer un tamaño máximo de archivo de rastreo, digamos 500 MB o 1 GB si tiene suficiente espacio (todo depende de la actividad que haya en el servidor, por lo que tendrás que chuparlo y verlo).Inicialmente inicie el rastreo y luego deténgalo. Vaya a File-> Export-> Script Trace Definition y 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 profiler. Cuando ejecuta esta secuencia de comandos generará la ID de seguimiento (generalmente
@ID=2
); nota esto abajo.Una vez que tenga un archivo de rastreo (.trc) (ya sea el seguimiento completado debido a alcanzar el tamaño máximo de archivo o detuvo el rastreo en ejecución usando
EXEC sp_trace_setstatus @ID, 0
EXEC sp_trace_setstatus @ID, 2
Puede cargar la traza en el generador de perfiles, o usar ClearTrace (muy útil) o cargarla 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 monitor de actividad en sql2k8 nos permite ver las consultas más caras. Ok, eso es genial, pero ¿hay alguna manera de que pueda registrar esta información u obtener esta información a través del analizador de consultas? Realmente no quiero tener la consola de administración Sql abierta y yo mirando el panel de control de actividad.
Quiero averiguar qué consultas están mal escritas / el esquema está mal diseñado, etc.
¡Muchísimas gracias por cualquier ayuda!
¿El Analizador del Servidor SQL haría lo que necesita? Todavía no utilicé 2008, por lo que no sé si la herramienta todavía está allí, pero si es así, creo que puede configurar un seguimiento para registrar consultas que cumplan criterios específicos (como los que ejecutan e impulsan CPU arriba un cierto umbral).
Hemos utilizado esto en nuestro proyecto e hizo un muy buen trabajo ayudándonos a solucionar problemas de ejecución de consultas (aunque no lo deje a tiempo completo, confíe en los Contadores de rendimiento de Windows generales para el seguimiento del estado del rendimiento).
(DELL) Quest SQL Optimizer para SQL Server 9.0 introduce el módulo Find SQL que permite a los usuarios localizar el SQL que más recursos consume en su SQL Server. https://support.quest.com/softwaredownloads.aspx?pr=268445262
Hay una nueva herramienta, Performance Studio en SQL Server 2008 que se basa en vistas de gestión dinámica mantenidas automáticamente por el servidor, que ofrece una visión general del rendimiento del servidor. Vale la pena echarle un vistazo.
La secuencia de comandos siguiente le da 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 había escuchado hablar de esta herramienta, pero Microsoft proporciona un conjunto de informes que hacen un trabajo fantástico al proporcionarle 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 echarle un vistazo.