SQL Server Management Studio, wie die Ausführungszeit auf Millisekunden reduziert wird


220

Wenn ich einen Stapel in SSMS sende (z. B. eine Abfrage durchführe), wird in der Statusleiste die Zeit angezeigt, die für die Ausführung benötigt wurde. Ist es möglich, SSMS so zu konfigurieren, dass die Abfragezeit mit einer Auflösung von Millisekunden angezeigt wird?

Hier ist die Bar, über die ich mit dem rot eingekreisten Abschnitt von Interesse spreche:

Geben Sie hier die Bildbeschreibung ein


3
Sie beantworten Ihre Frage nicht wirklich, aber Sie können SQL Server Profiler (ein Protokollierungstool) verwenden, um die Dauer Ihrer Abfrage zu überprüfen. Die Dauer wird in Millisekunden gemessen.
AGuyCalledGerald

Antworten:


66

Ich hatte damit zu kämpfen, bis ich das fand ...

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

Wenn Sie das Eigenschaftenfenster öffnen, finden Sie möglicherweise eine magische "verstrichene Verbindungszeit", die Ihnen möglicherweise etwas Ausführungszeit gibt ... Ich hoffe, es hilft ...


18
Der Teil bezüglich des Eigenschaftenfensters ist wirklich die Antwort auf diesen Thread. "Elapsed Time" sitzt da und starrt dir ins Gesicht.
Eric

Und ich setze diese Antwort jetzt als akzeptierte Antwort, da sie am korrektesten ist.
Michael Goldshteyn

363

Was Sie tun möchten, ist Folgendes:

set statistics time on

-- your query

set statistics time off

Dadurch sieht die Ausgabe in Ihrem Nachrichtenfenster ungefähr so ​​aus:

SQL Server-Ausführungszeiten: CPU-Zeit = 6 ms, verstrichene Zeit = 6 ms.


1
Dadurch wird das Timing jedoch in das Nachrichtenfenster eingefügt, was bedeutet, dass ich nach dem Ausführen der Abfrage manuell dorthin wechseln muss. Außerdem scheinen die Ergebnisse nicht sinnvoll zu sein, zum Beispiel: CPU-Zeit = 1357 ms, verstrichene Zeit = 169 ms. Wie summiert sich das, selbst wenn ich 8 Kerne mit Hyperthreading habe (dh 16 virtuelle)?
Michael Goldshteyn

2
@MichaelGoldshteyn, warum Ihre CPU-Zeit länger ist, weil Sie eine Multi-Core- oder Hyperthread-CPU haben.

25
@ MichaelGoldshteyn 1357/8 = 169,625. Zufall?
Dan J

3
@DanJ, ​​die DB macht nicht alles aus dem Speicher. Oft ist E / A beteiligt und E / A bedeutet mehr verstrichene Zeit.
Michael Goldshteyn

9
@binki Du hast Recht, dass mein 1.555 Tage alter Kommentar ungenau war.
Benizi

125

Aktivieren Sie die Client-Statistik, indem Sie einen der folgenden Schritte ausführen :

  • Menü: Abfrage> Client-Statistiken einschließen
  • Symbolleiste: Klicken Sie auf die Schaltfläche (neben Tatsächliche Ausführungszeit einschließen).
  • Tastatur: Umschalt-Alt-S

Dann erhalten Sie eine neue Registerkarte, auf der die Timings, E / A-Daten und Zeilenzahlen usw. für (bis zu) die letzten 10 Exektionen (plus Durchschnittswerte!) Aufgezeichnet werden:

Geben Sie hier die Bildbeschreibung ein


Es ist das gleiche wie die Antwort von @Ymagine First vom November 2012. Siehe die Antwort oben ...
Bogdan Bogdanov

Diese Site hatte (ironischerweise) zu diesem Zeitpunkt einen SQL-Fehler, daher habe ich die wichtigsten Informationen aus einem Google-Cache extrahiert und als neue Antwort veröffentlicht. Ich hatte nicht vor, Kredit zu stehlen, und vielleicht hätte ich stattdessen die ursprüngliche Antwort bearbeiten sollen.
NickG

Eigentlich habe ich anscheinend nicht genug Wiederholungspunkte, um Fragen zu bearbeiten. Deshalb habe ich das wahrscheinlich nicht getan.
NickG


17

So erhalten Sie die Ausführungszeit als Variable in Ihrem Prozess:

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] 

UND sieh das

Messen der Abfrageleistung: "Abfragekosten für Ausführungsplan" im Vergleich zu "Zeitaufwand"


1
Datepart NS steht für Nanosekunden, für Millisekunden verwenden Sie MS
Milan Matějka

12

Ich war hinter der gleichen Sache her und stolperte über den folgenden Link, der brillant war:

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

Es werden drei verschiedene Möglichkeiten zur Messung der Leistung gezeigt. Alles gut für ihre eigenen Stärken. Ich habe mich für Folgendes entschieden:


DECLARE @ Time1 DATETIME

DECLARE @ Time2 DATETIME

SET @ Time1 = GETDATE ()

- Abfrage hier einfügen

SET @ Time2 = GETDATE ()

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


Daraufhin werden die Ergebnisse Ihrer Abfrage angezeigt, gefolgt von der Zeit, die für die Fertigstellung benötigt wurde.

Hoffe das hilft.


Ich fand das unbeständig, zeigt manchmal Zeit und manchmal zeigt nur 0.
RMati

2

Ich weiß nicht, wie man die Informationsleiste erweitert.

Sie können jedoch die Zeiteinstellungen als Standard für alle Abfragen festlegen, die auf der Registerkarte "Nachrichten" angezeigt werden.

Gehen Sie in einem Abfragefenster zum Menüpunkt "Abfrage", wählen Sie "Abfrageoptionen" und dann "Erweitert" in der Gruppe "Ausführung" und aktivieren Sie die Kontrollkästchen "Statistikzeit einstellen" / "Statistik-E / A festlegen". Diese Werte werden dann für jede Abfrage im Nachrichtenbereich angezeigt, ohne dass Sie daran denken müssen, die festgelegten Statistiken ein- und auszuschalten.

Sie können auch jederzeit Umschalt + Alt + S verwenden, um Client-Statistiken zu aktivieren


0

Sie können diesen Code ausprobieren:

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.