Cómo identificar consultas más pesadas en SQL Server

Muchas veces nos encontramos en situaciones en las cuales tenemos un servidor SQL Server, y los usuarios reportan que el sistema está lento, por lo tanto, es crucial que podamos identificar cuál es la causa. 

El primer paso puede ser identificar cuáles son las consultas TSQL que están consumiendo más recursos en el servidor, para poder identificarlas podemos recurir al siguiente script, el cual nos devuelve las consultas ordenadas por tiempo de ejecución, a partir de esta consulta podemos identicar el TSQL que consume más recursos e iniciar nuestras tareas de mejoras de desempeño.


-- Consultas que afectan el desempeño
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) AS consulta_TSQL
	,db.name AS [nombre_base_datos]
	,qs.total_elapsed_time / 1000 AS tipo_total_ms
	,qs.total_elapsed_time / qs.execution_count / 1000 AS tiempo_promedio_ms
	,qs.last_elapsed_time / 1000 AS ultimo_tiempo_total_ms
	,qs.execution_count AS total_ejecuciones
	,qs.total_worker_time / 1000 AS total_worker_time_ms
	,qs.total_worker_time / qs.execution_count / 1000 AS promedio_worker_time_ms
	,qs.last_worker_time / 1000 AS ultimo_worker_time_ms
	,qs.last_execution_time AS ultima_ejecucion
	,qs.total_logical_reads AS total_lecturas
	,qs.last_logical_reads AS ultimas_lecturas
	,qs.total_logical_writes AS total_escrituras
	,qs.last_logical_writes AS ultimas_escrituras
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
LEFT JOIN sys.databases db ON (qt.dbid = db.database_id)
ORDER BY qs.total_elapsed_time DESC

Comments

Popular posts from this blog

Desempeño de SQL Server 2008 R2 y Max Worker Threads

SQL Server La longitud de los datos LOB (2200100) que se van a replicar excede el máximo configurado 65536.