Abfrage Dauer Schätzung in SQL Server
-
03-07-2019 - |
Frage
ich in Oracle 10g gesehen habe eine Funktion, die die verbleibende Zeit für eine lange Lauf Abfrage schätzt, und ich frage mich, ob dies möglich ist, auch in SQL Server (zumindest im Jahr 2008?)?
Angenommen, ich habe eine sehr große Tabelle mit zig Millionen Zeilen (gut indiziert etc. etc.) und ich brauche für einige bestimmten Zeilen zu suchen. Ich weiß, es wird viel Zeit in Anspruch nehmen, und ich bin cool mit, aber ich möchte den Benutzer mit irgendeiner Art eines Fortschrittsbalkens präsentieren.
Wie kann ich zeigen Fortschritt?
Lösung
Ich würde es vergessen und einfach nur einen Spinnkreis setzen!
Aber im Ernst, weiter MrTelly Idee zu nehmen, gibt es eine dynamische Verwaltung Ansichten, die Ihnen durchschnittliche Ausführungszeiten für bestimmte Abfragen geben können -. Vielleicht, dass Sie irgendwo bekommen
http://msdn.microsoft.com/en-us/library /ms188754.aspx
edit: Ich habe Prozent abgeschlossen im sp_whoisactive Verfahren von Adam Machanic gesehen. Vielleicht in das ist eine andere Stelle zu suchen. SQL 2016 hat die Abfrage speichern, die Plan-Cache-Informationen weiterhin besteht - einen Ersatz für die DMV-Plan-Cache, der beim Neustart gelöscht wird.
Andere Tipps
Siehe auch:
Die heutigen Datenbanksysteme bieten wenig Rückmeldung an den Benutzer / DBA auf wie viel von einer Ausführung der SQL-Abfrage abgeschlossen ist. Für lange Ausführen von Abfragen, kann eine solche Rückmeldung sehr nützlich sein, beispielsweise auf entscheiden, ob die Abfrage beendet werden sollte oder ausführen dürfen bis zur Fertigstellung. Obwohl die obige Anforderung ist einfach auszudrücken, einen robusten Indikatoren für Fortschritt für die Suche nach der Ausführung der Entwicklung ist herausfordernd. In dieser Arbeit untersuchen wir das oben genannte Problem und Gegenwart Techniken, die die Grundlage für eine effektive Fortschritt Schätzung bilden kann. Die Ergebnisse der experimentell unsere Techniken in Microsoft Validieren SQL Server sind vielversprechend.
Ich bin mir nicht bewusst ein Tool, das dies automatisch tun wird, aber es gibt ein paar Alternativen. Brechen Sie Ihre Abfrage in Blöcke ...
select blah from table where IdRange between (1 and 100000)
select blah from table where IdRange between (100001 and 200000)
als jede SQL der Fortschrittsbalken so aktualisieren abgeschlossen ist.
Oder man könnte die Länge der Zeit für jedes Ihrer wählt genommen aufzeichnen, speichert diese Werte vielleicht auf einer Basis pro Benutzer. Dann diese Informationen verwenden, um einen Fortschrittsbalken Länge zurückzukehren.
Diese beiden Ansätze sind ziemlich kludgy, hoffentlich jemand weiß, einen besseren Ansatz.
Natürlich könnten Sie versuchen, den Abfrageplan zu entschlüsseln und ein Urteil auf dieser Grundlage machen, aber in Code, der schwer sein würden.