Was misst die Dauer in SQL Server tatsächlich?

8

Was genau misst die Abfragedauer beim Durchführen eines Profiler-Trace?

Ich habe eine gespeicherte Prozedur, die den Datenzugriff (SELECT) ausführt, und es dauert durchschnittlich etwa 30 Sekunden, um die Ergebnisse an die Anwendung zurückzugeben. Wenn ich jedoch einen Trace darauf ausführe, erhalte ich eine durchschnittliche Dauer von ungefähr 8 Sekunden, eine maximale Dauer von 12 Sekunden und eine durchschnittliche CPU von 5,5 Sekunden.

Was kann dazu führen, dass die Rückgabe der Ergebnismenge so viel länger dauert? Ich sammle keine großen NETWORKIO-Wartezeiten. Die Ergebnismenge besteht nur aus ungefähr 270 Zeilen einfacher Textdaten, insgesamt ungefähr 50 Spalten.

sqlbattsman
quelle
4
Dies beinhaltet nicht die Zeit, die benötigt wird, um die Ergebnisse auf dem Client zu liefern und zu rendern.
Aaron Bertrand
Das ist sinnvoll, aber wenn es eine große Verzögerung gäbe (3x die Ausführungszeit, um Ergebnisse zu erzielen), würden Sie nicht erwarten, dass große NETWORKIO-Wartezeiten auftreten? Mein letzter Neustart war erst gestern, mit einer Wartezeit von insgesamt 230 Sekunden für NETWORKIO (scheint mir für einen Tag nicht viel zu sein).
sqlbattsman
3
Haben Sie versucht, den Befehl mit SET STATISTICS TIME usw. auszuführen? Auch wenn Zeit für das Rendern aufgewendet wird, wird dies im Netzwerk nicht angezeigt. Gibt es Unterschiede, wenn Sie all diese Daten in den Ergebnissen in Text oder Raster rendern?
Aaron Bertrand
Die Ergebnisse zum Text unterscheiden sich nicht wesentlich. Wenn ich es jetzt mit SET STATISTICS TIME
ausführe

Antworten:

1

Die Dauer gibt die Gesamtzeit vom Start bis zum Abschluss der Anforderung durch SQL Server an, die die Zeit für das Senden über das Netzwerk, die CPU-Zeit, die Wartezeiten und die Ausführung angibt. Wie Aaron erwähnt hat, hat der SQL Server nach dem Empfang der Daten das Timing beendet und der Client verarbeitet dann. Dies sollte nicht Teil der Dauer sein.

SheldonH
quelle