2010-10-27 18 views
5

Así que he usado SQL Profiler antes y sé cómo puedo ver lo que mi LINQ consultas están haciendo detrás de las escenas. Ahora, estamos en el proceso de identificar consultas que pueden llevar más tiempo y necesitan optimizarse o indexarse.SQL Server Profiling cómo debería hacerlo?

Así que ahora, cuando veo mis consultas LINQ en el generador de perfiles que se ejecuta al lado del otro, hay muchos otros datos y consultas que no me importan. ¿Hay alguna forma en que el generador de perfiles u otras herramientas puedan ordenar las consultas en el orden de mayor tiempo ... para que yo pueda optimizarlo? Quiero ejecutar mi aplicación y luego ver de alguna manera en el generador de perfiles las peores consultas del lote.

¿Alguien puede guiarme o dirigirme hacia algo que es más útil tratando de hacer perfiles con sql server 2005. También se agradece cualquier idea o sugerencia o la mejor manera de abordar la creación de perfiles. Gracias.

Respuesta

3

Aquí hay una consulta en un DMV que listará las consultas con algunos detalles sobre el tiempo de la CPU. Una vez que identifica la consulta, ejecútela con Include Actual Execution Plan para ver el flujo de consulta y dónde puede necesitar indexar.

select 
    highest_cpu_queries.plan_handle, 
    highest_cpu_queries.total_worker_time, 
    q.[text] 
from 
    (select top 50 
     qs.plan_handle, 
     qs.total_worker_time 
    from 
     sys.dm_exec_query_stats qs 
    order by qs.total_worker_time desc) as highest_cpu_queries 
    cross apply sys.dm_exec_sql_text(plan_handle) as q 
order by highest_cpu_queries.total_worker_time desc 

Aquí es un buen article en encontrar problemas de rendimiento.

1

Puede comenzar alterando las propiedades de rastreo al iniciar el Analizador. Seleccione la pestaña Selección de eventos y haga clic en el botón Filtros de columna. En el cuadro de diálogo Editar filtro, seleccione Duración. Luego haga clic en Mayor o igual e ingrese un valor. El valor está expresado en milisegundos, por lo que si desea ver consultas con una duración superior a 5 segundos, ingrese 5000.

Puede ver otros filtros aquí también y configurar el valor de duración según sea necesario.

2

para una "una rápida sucia" lista de los peores consultas, sólo podría utilizar algo como esto:

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 
ORDER BY 3 DESC 

véase: http://msdn.microsoft.com/en-us/library/ms189741%28SQL.90%29.aspx