2009-05-04 20 views
46

Utilizzando Sql Server 2005 Profiler, quali eventi, colonne e filtri si traccia per trovare le query più lente e le stored procedure?Come trovare le query più lente

Lento = superiore a N secondi, 10 a titolo di argomento.

+0

Definire "lento". Sebbene una query possa essere lenta, ciò è rilevante solo per il numero di chiamate effettuate e se queste sono critiche o meno. – Lucero

risposta

77

In SQL 2005 è possibile utilizzare le viste di gestione per trovare slow running queries. Un buon script che ho trovato qualche tempo fa su SQL server performance ti aiuterà a iniziare; elenca prima i dati con il rendimento più lento.

SELECT creation_time 
     ,last_execution_time 
     ,total_physical_reads 
     ,total_logical_reads 
     ,total_logical_writes 
     , execution_count 
     , total_worker_time 
     , total_elapsed_time 
     , total_elapsed_time/execution_count avg_elapsed_time 
     ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, 
     ((CASE statement_end_offset 
      WHEN -1 THEN DATALENGTH(st.text) 
      ELSE qs.statement_end_offset END 
      - qs.statement_start_offset)/2) + 1) AS statement_text 
FROM sys.dm_exec_query_stats AS qs 
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st 
ORDER BY total_elapsed_time/execution_count DESC; 
+1

conosci l'unità di misura dei tempi: total_worker_time, total_elapsed_time e avg_elapsed_time? –

+4

I tempi sono espressi in microsecondi; MSDN ha una buona ripartizione sulla visualizzazione di gestione http://msdn.microsoft.com/en-us/library/ms189741.aspx – u07ch

+1

Sì, quei DMV sono fantastici - ma sono anche DINAMICI - come suggerisce il loro nome, ad es. vengono scaricati ogni volta che il server si avvia. Se il tuo server viene riavviato ogni notte, questi potrebbero non rappresentare un campione molto affidabile in un dato giorno. Quindi tratta queste misurazioni con attenzione - sono dinamiche e potrebbero essere basate su un campione piuttosto piccolo ... –

3

La colonna durata lo fa per me, ma a volte guardo anche le colonne di lettura e scrittura.

Uso il filtro TSQL: StmtCompleted per ottenere le query non elaborate. Potresti voler aggiungere altri come stored procedure, ma tsql è la 'base' che devi visualizzare. Come il MSDN article dice

"L'esecuzione di una stored procedure può essere monitorato dalla SP: partenza, SP: StmtStarting, SP: StmtCompleted, e SP: Completato classi di eventi e di tutte le classi di evento TSQL ".

10

Prima di utilizzare il profiler, controllo i report di utilizzo incorporati. Fare clic con il pulsante destro del mouse su un database, report, report standard, quindi statistiche di esecuzione degli oggetti.

Elenca i piani di esecuzione attualmente memorizzati nella cache, insieme alla quantità di risorse e al numero di volte in cui sono stati eseguiti. Questo generalmente dà un'idea molto precisa di cosa tiene occupato il server.

+1

@Andomar, è ok per eseguire quel report su un server di produzione? Ho provato a eseguire quel report su uno dei miei server di produzione e, dopo un minuto, ha detto "riacquisire i dati". L'ho fermato per essere al sicuro. –

+0

@Bill Paetzke: il report dovrebbe essere sicuro per la produzione anche se è piuttosto lungo. Se non ti fidi di questo, puoi controllare l'elenco dei processi per i problemi di blocco! – Andomar

Problemi correlati