2010-10-27 17 views
5

Così ho usato SQL Profiler prima e so come posso vedere quello che i miei query LINQ stanno facendo dietro le quinte. Ora siamo in procinto di identificare le query che potrebbero richiedere più tempo e devono essere ottimizzate o indicizzate.SQL Server Profiling come devo fare?

Così, ora, quando visualizzano le query LINQ nel profiler in esecuzione fianco a fianco c'è molta altri dati e query che mi preoccupo. C'è comunque il profiler o alcuni altri strumenti potrebbe ordinare le query in ordine di tempo più grande .... in modo che io lavorerò su come ottimizzare esso. Voglio eseguire la mia applicazione e quindi vedere in qualche modo nel profiler le domande peggiori del lotto.

Qualcuno può guidarmi o indirizzarmi verso qualcosa che è più utile cercando di fare profilazione con SQL Server 2005. Inoltre sono gradite tutte le idee o suggerimenti o i modi migliori per andare sulla profilazione. Grazie.

risposta

3

Ecco una query su un DMV che elencherà le query con alcuni dettagli sul tempo di CPU. Una volta a individuare la query eseguirlo con Include Actual Execution Plan impostato per vedere il flusso di query e in cui si potrebbe aver bisogno indicizzato.

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 

Ecco una buona article sulla ricerca di problemi di prestazioni.

1

Si può iniziare alterando le proprietà di traccia quando si avvia il Profiler. Seleziona la scheda Selezione eventi e fai clic sul pulsante Filtri colonne. Nella finestra di dialogo Modifica filtro, selezionare Durata. Quindi fare clic su Maggiore o uguale e inserire un valore. Il valore è in millisecondi, quindi se vuoi vedere le query con durata superiore a 5 secondi, inserisci 5000.

Puoi anche guardare altri filtri qui e configurare il valore della durata secondo necessità.

2

per un "rapido un sporco" elenco delle query peggiori, si potrebbe utilizzare qualcosa di simile:

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 

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