SQL Server Management Studio, come ridurre i tempi di esecuzione a millisecondi


220

Quando invio un batch (ad esempio, eseguo una query) in SSMS, vedo il tempo impiegato per l'esecuzione nella barra di stato. È possibile configurare SSMS per mostrare il tempo di query con una risoluzione di millisecondi?

Ecco il bar di cui sto parlando con la sezione di interesse cerchiata in rosso:

inserisci qui la descrizione dell'immagine


3
Non rispondi davvero alla tua domanda, ma puoi utilizzare SQL Server Profiler (uno strumento di registrazione) per verificare la durata della query. La durata è misurata in millisecondi.
AGuyCalledGerald

Risposte:


66

Stavo lottando con quello fino a quando ho trovato questo ...

http://blog.sqlauthority.com/2009/10/01/sql-server-sql-server-management-studio-and-client-statistics/

Inoltre, se apri la finestra Proprietà potresti trovare un magico "Tempo trascorso di connessione" che potrebbe darti un po 'di tempo di esecuzione ... Spero che ti aiuti ...


18
La parte relativa alla finestra Proprietà è davvero la risposta a questo thread. "Tempo trascorso" è seduto lì a fissarti in faccia.
Eric

E ora sto impostando questa risposta come risposta accettata, poiché è la più corretta.
Michael Goldshteyn,

363

Quello che vuoi fare è questo:

set statistics time on

-- your query

set statistics time off

Questo avrà un aspetto simile a questo nella finestra Messaggi:

Tempi di esecuzione di SQL Server: tempo CPU = 6 ms, tempo trascorso = 6 ms.


1
Ma questo mette i tempi nella finestra Messaggi, il che significa che devo capovolgerli manualmente dopo aver eseguito la query. Inoltre, i risultati sembrano non avere senso, ad esempio: tempo CPU = 1357 ms, tempo trascorso = 169 ms. Come si somma, anche se ho 8 core con hyperthreading (ovvero 16 virtuali)?
Michael Goldshteyn,

2
@MichaelGoldshteyn sul perché il tempo della tua CPU è maggiore, è perché hai una CPU multi-core o hyperthreaded.

25
@MichaelGoldshteyn 1357/8 = 169.625. Coincidenza?
Dan J,

3
@ Dan, il DB non fa tutto dalla memoria. Spesso l'I / O è coinvolto e l'I / O significa più tempo trascorso.
Michael Goldshteyn,

9
@binki Hai ragione nel dire che il mio commento di 1.555 giorni era inesatto.
benizi,

125

Attiva Statistiche client eseguendo una delle seguenti operazioni:

  • Menu: Query> Includi statistiche client
  • Barra degli strumenti: fai clic sul pulsante (accanto a Includi tempo di esecuzione effettivo)
  • Tastiera: Maiusc-Alt-S

Quindi viene visualizzata una nuova scheda che registra i tempi, i dati IO, i conteggi delle righe ecc. Per (fino a) le ultime 10 uscite (più le medie!):

inserisci qui la descrizione dell'immagine


È la stessa della risposta di @Ymagine First di Nov'2012. Vedi la risposta sopra ...
Bogdan Bogdanov il

Quel sito (ironia della sorte) aveva un errore SQL in quel momento, quindi ho estratto le informazioni chiave da una cache di Google e pubblicato come nuova risposta. Non intendevo rubare credito e forse avrei dovuto modificare la risposta originale.
NickG,

In realtà, sembra che non ho abbastanza punti rep per modificare le domande, quindi è probabilmente per questo che non l'ho fatto.
NickG

3
Cordiali saluti, le unità per le statistiche temporali sono espresse
congusbongus,

17

Per ottenere il tempo di esecuzione come variabile nel tuo proc:

DECLARE @EndTime datetime
DECLARE @StartTime datetime 
SELECT @StartTime=GETDATE() 

-- Write Your Query


SELECT @EndTime=GETDATE()

--This will return execution time of your query
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in millisecs] 

E guarda questo

Misurazione delle prestazioni della query: "Costo query piano di esecuzione" vs "Tempo impiegato"


1
Datepart NS rappresenta i nanosecondi, per millisecondi usa MS
Milan Matějka

12

Stavo cercando la stessa cosa e mi sono imbattuto nel seguente link che è stato geniale:

http://www.sqlserver.info/management-studio/show-query-execution-time/

Mostra tre diversi modi di misurare le prestazioni. Tutto bene per i propri punti di forza. Quello per cui ho optato era il seguente:


DECLARE @ Time1 DATETIME

DICHIARA @ Time2 DATETIME

SET @ Time1 = GETDATE ()

- Inserisci qui la query

SET @ Time2 = GETDATE ()

SELEZIONA DATEDIFF (MILLISECOND, @ Time1, @ Time2) AS Elapsed_MS


Questo mostrerà i risultati della tua query seguiti dal tempo impiegato per il completamento.

Spero che questo ti aiuti.


L'ho trovato incostante, a volte mostra il tempo e a volte mostra solo 0.
RMati

2

Non so di espandere la barra delle informazioni.

Ma puoi impostare i tempi come predefiniti per tutte le query visualizzate nella scheda "Messaggi".

Quando ci si trova in una finestra Query, andare alla voce Menu Query, selezionare "Opzioni query", quindi selezionare "Avanzate" nel gruppo "Esecuzione" e selezionare le caselle di controllo "Imposta statistiche tempo" / "Imposta statistiche IO". Questi valori verranno quindi visualizzati nell'area dei messaggi per ogni query senza dover ricordare di attivare e disattivare le statistiche impostate.

Puoi anche usare Maiusc + Alt + S per abilitare le statistiche dei clienti in qualsiasi momento


0

Puoi provare questo codice:

USE AdventureWorks2012;
GO
SET STATISTICS TIME ON;
GO
SELECT ProductID, StartDate, EndDate, StandardCost 
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF;
GO
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.