2010-03-23 20 views
15

¿Cómo encontrar las consultas de peor rendimiento en SQL Server 2008?¿Cómo encontrar las consultas de peor rendimiento en SQL Server 2008?

me encontré con el siguiente ejemplo, pero no parece funcionar:

SELECT TOP 5 obj.name, max_logical_reads, max_elapsed_time 
FROM sys.dm_exec_query_stats a 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) hnd 
INNER JOIN sys.sysobjects obj on hnd.objectid = obj.id 
ORDER BY max_logical_reads DESC 

Tomado de:

http://www.sqlservercurry.com/2010/03/top-5-costly-stored-procedures-in-sql.html

Respuesta

24

10 peores consultas basado en ...:

SELECT TOP 10 
    total_worker_time/execution_count AS Avg_CPU_Time 
     ,execution_count 
     ,total_elapsed_time/execution_count as AVG_Run_Time 
     ,(SELECT 
       SUBSTRING(text,statement_start_offset/2,(CASE 
                  WHEN statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), text)) * 2 
                  ELSE statement_end_offset 
                 END -statement_start_offset)/2 
         ) FROM sys.dm_exec_sql_text(sql_handle) 
     ) AS query_text 
FROM sys.dm_exec_query_stats 

--pick your criteria 

ORDER BY Avg_CPU_Time DESC 
--ORDER BY AVG_Run_Time DESC 
--ORDER BY execution_count DESC 
+0

+1 funciona bastante bien para mí.Parece que hay algunos duplicados en las filas devueltas, pero se ve a la derecha :) –

+2

duplicados en las filas podrían ser versiones anteriores de los planes de consulta que se han invalidado (variedad de razones, el cambio de estadísticas es común) El plan no se expulsa desde la memoria en la invalidación para que aparezcan. Otra razón será la parametrización (o más bien la falta de), lo que significa que muchas consultas similares con diferentes parámetros pueden estar en la memoria caché, ocurre con procedimientos ad-hoc SQL no almacenados, pero parece que hay muchos duplicados cuando no lo es. – Andrew

+0

@KM: la intención de agregar una ligera respuesta alternativa, ¿qué hay de unirse a sys.dm_exec_query_plan y extraer el plan de consulta? Siempre vale la pena extraer de la memoria caché con el peor rendimiento. – Andrew

3

Encontrar consultas lentas rendimiento con SQL

  • de inicio Analizador de SQL (preferiblemente en la base de datos en vivo).
  • Archivo -> Nueva traza
  • Elija servidor SQL
  • filtro Tab
  • opcionalmente establecer un filtro en el nombre de la base
  • iniciar el analizador (RUN)
  • guardar el resultado en una tabla, por ejemplo: _Mytrace, preferiblemente en un servidor de base de datos que no tiene mucho que ver ya
  • Filtrar las consultas de selección
  • para ellos por la duración
  • Comprobar plan de exectution para esta consulta
+0

ejecutar el perfilador es sin duda una buena primera opción. una vez que comprenda bien la funcionalidad del perfilador, puede ejecutar los rastros. –

+0

simplemente no deje el generador de perfiles funcionando durante demasiado tiempo en el servidor de producción. en su modo predeterminado, es un poco de un cerdo de recursos. –

4

Si usted quiere encontrar las consultas peor desempeño de tiempo necesario, que haría uso de este:

SELECT * 
FROM sys.dm_exec_query_stats a 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) hnd 
ORDER BY total_elapsed_time/execution_count DESC 

Sin embargo, la búsqueda de las "peores" consultas a menudo requiere un poco más de sondeo en el exec_query_stats DMV. Hay muchas cosas a considerar:

  1. Peores consultas individuales por tiempo que la consulta anterior producirá.
  2. cerdos Peor CPU (si está ejecutando en lo alto de la CPU), que ordenaría por total_worker_time/execution_count
  3. consultas que realizan la mayoría de las lecturas, que a menudo son consultas que tardan más tiempo.

Ahora estas consultas resaltarán las consultas que tienen un bajo rendimiento, pero a menudo puede tener consultas con un rendimiento "justo" pero se llama con frecuencia, lo que reduce el rendimiento general de su aplicación. Para encontrarlos, ordene la consulta anterior por total_elapsed time (o total_[whatever metric you are interested in]) y no los divida por execution_count.

6

This El artículo de MSDN Magazine proporciona información excelente sobre este tema.

+0

+1 artículo impresionante! –

+0

+1 artículo excelente pero tuvo problemas con 2008. –

+0

@ThomasBratt Es posible que necesite cambiar el nivel de compatibilidad de su base de datos para ejecutar esas consultas. Yo si. –

Cuestiones relacionadas