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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top