Ich versuche, die Leistung einer gespeicherten Prozedur zu verbessern. Wenn ich den SP starte, wird er fast sofort beendet, als ob etwas zwischengespeichert wäre. Mir wurde gesagt, dass ich die folgenden zwei SQL-Zeilen verwenden soll, bevor ich den SP in SSMS ausführe:
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Wenn ich den SP mit den beiden Codezeilen darüber ausführe, ist der SP in ungefähr 8 Sekunden fertig. Gibt mir dies jedoch wirklich die tatsächliche Ausführungszeit (als würde ich dies von einer Anwendung aus ausführen)? Wie soll ich wissen?
Antworten:
Diese Befehle bewirken zwei Dinge:
Sie erhalten im Grunde eine Zeit, die dem "Worst-Case" -Szenario entspricht - Sie haben gerade den Server neu gestartet und nichts ist im Speicher. Nachfolgende Läufe müssen nicht die Kosten für das Abrufen der Daten von der Festplatte bezahlen, da diese Seiten bereits in den Speicher geladen sind.
Dies ähnelt einer realen Situation - Ihr erster Benutzer, der eine bestimmte Abfrage ausführt, muss wahrscheinlich länger warten als bei nachfolgenden Ausführungen, vorausgesetzt, Sie überprüfen dieselben Daten.
Eine gute Methode, die ich gerne verwende, besteht darin, mehrmals zu laufen und einen Durchschnitt zu ermitteln. Dies ist besonders in einer gemeinsam genutzten Umgebung hilfreich, da Sie nicht die vollständige Kontrolle über gemeinsam genutzte Ressourcen wie tempdb haben.
Sie können diese Befehle auch verwenden, um weitere Informationen darüber zu erhalten, was tatsächlich hinter den Kulissen passiert:
Auf diese Weise erhalten Sie detaillierte Informationen zu Seitenlesevorgängen von der Festplatte (pro Objekt), zu logischen Seitenlesevorgängen, zum Zeitaufwand für die Erstellung eines Plans und zum Zeitaufwand für die Ausführung einer Abfrage.
quelle
GO 5
einfach wie in SSMS beenden. Es ist ein kostenloser Download, ich versuche nicht, Ihnen etwas zu verkaufen. sqlsentry.net/plan-explorer/sql-server-query-view.asp