Domanda Come posso registrare e trovare le query più costose?


Il monitoraggio dell'attività in sql2k8 ci consente di visualizzare le query più costose. Ok, è bello, ma c'è un modo per registrare queste informazioni o ottenere queste informazioni tramite l'analizzatore di query? Non voglio davvero avere la console di gestione Sql aperta e io sto guardando il dashboard del monitor dell'attività.

Voglio capire quali query sono scritte male / lo schema è mal progettato, ecc.

Grazie mille per qualsiasi aiuto!


62
2017-11-03 04:02


origine


risposte:


  1. Utilizzare SQL Server Profiler (nel menu degli strumenti in SSMS) per creare una traccia che registra questi eventi:

     RPC:Completed
     SP:Completed
     SP:StmtCompleted
     SQL:BatchCompleted
     SQL:StmtCompleted
    
  2. È possibile iniziare con il modello di traccia standard e sfoltirlo. Non hai specificato se questo fosse per un database specifico o l'intero server, se è per Db specifici, includi la colonna DatabaseID e imposta un filtro sul tuo DB (SELECT DB_ID('dbname')). Assicurarsi che la colonna di dati Lettura logica sia inclusa per ciascun evento. Imposta la traccia per accedere a un file. Se lasci questa traccia da eseguire in background senza sorveglianza, è una buona idea impostare una dimensione massima del file di traccia dire 500 MB o 1 GB se hai molto spazio (tutto dipende da quanta attività c'è sul server, quindi dovrai succhiarlo e vedere).

  3. Iniziare brevemente la traccia e quindi metterla in pausa. Vai a File-> Esporta-> Script Trace Definition e scegli la versione del tuo DB e salva in un file. Ora hai uno script sql che crea una traccia che ha un sovraccarico molto inferiore rispetto alla GUI del profiler. Quando si esegue questo script, verrà generato l'ID traccia (di solito @ID=2); annota questo.

  4. Una volta che hai un file di traccia (.trc) (o la traccia è stata completata a causa del raggiungimento della dimensione massima del file o hai interrotto la traccia corrente usando

    EXEC sp_trace_setstatus @ID, 0
      EXEC sp_trace_setstatus @ID, 2

È possibile caricare la traccia nel profiler o utilizzare ClearTrace (molto utile) o caricarlo in una tabella in questo modo:

SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)

Quindi puoi eseguire una query per aggregare i dati come questo:

SELECT COUNT(*) AS TotalExecutions, 
    EventClass, CAST(TextData as nvarchar(2000))
 ,SUM(Duration) AS DurationTotal
 ,SUM(CPU) AS CPUTotal
 ,SUM(Reads) AS ReadsTotal
 ,SUM(Writes) AS WritesTotal
FROM TraceTable
GROUP BY EventClass, CAST(TextData as nvarchar(2000))
ORDER BY ReadsTotal DESC

Una volta identificate le query costose, è possibile generare ed esaminare i piani di esecuzione effettivi.


61
2017-11-03 04:35



Lo script seguente ti dà il risultato.

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),
qs.execution_count,
qs.total_logical_reads, 
qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,qp.query_plan
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
ORDER BY qs.total_logical_reads DESC 

21
2017-11-27 11:52



Non avevo mai sentito parlare di questo strumento prima d'ora, ma Microsoft fornisce una serie di rapporti che fanno un ottimo lavoro nel darti esattamente questo, comprese le query più lente. Dai un'occhiata a loro Rapporti Dashboard delle prestazioni.

Non sono sicuro se siano compatibili con SQL 2008, ma vale la pena di provarlo.


4
2017-12-12 02:16



SQL Server Profiler farebbe quello che ti serve? Non ho ancora usato il 2008, quindi non so se lo strumento è ancora lì, ma se è così credo che sia possibile impostare una traccia per registrare le query che soddisfano criteri specifici (come quelli che eseguono e guidano la CPU sopra una certa soglia).

Lo abbiamo usato nel nostro progetto e ci ha aiutato molto a risolvere i problemi di esecuzione delle query (anche se non lo lasciamo a tempo pieno, affidiamoci ai contatori generali delle prestazioni di Windows per il tracciamento delle prestazioni).


2
2017-11-03 04:12



C'è un nuovo strumento, Performance Studioin SQL Server 2008 che si basa su viste di gestione dinamica gestite automaticamente dal server, che fornisce una panoramica delle prestazioni del server. Vale la pena dare un'occhiata.


2
2018-04-20 10:55



(DELL) Quest SQL Optimizer per SQL Server 9.0 introduce il modulo Trova SQL che consente agli utenti di individuare l'SQL più intensivo delle risorse in SQL Server. https://support.quest.com/softwaredownloads.aspx?pr=268445262


0
2018-06-14 08:42