it-swarm.com.de

Wie kann eine lange SQL-Abfrage sofort abgebrochen werden?

Ich benutze SQL Server 2008 und sein Managementstudio. Ich habe eine Abfrage ausgeführt, die viele Zeilen ergibt. Ich habe versucht, es über die rote Abbruchtaste abzubrechen, aber es hat die letzten 10 Minuten nicht angehalten. Normalerweise stoppt es innerhalb von 3 Minuten. 

Was könnte der Grund sein und wie höre ich sofort damit auf?

74
sequel.learner

Was könnte der Grund sein? 

Ein Abbruch der Abfrage ist sofort möglich, sofern Ihre Aufmerksamkeit den Server erreichen und verarbeitet werden kann. Eine Abfrage muss sich in einem Zustand befinden, der abgebrochen werden kann. Dies ist fast immer wahr, es sei denn, Sie führen bestimmte Vorgänge aus, z. Wenn Ihre Aufmerksamkeit den Server nicht erreichen kann, liegt dies in der Regel an Scheduler Overload.

Wenn Ihre Abfrage jedoch Teil einer Transaktion ist, die ein Rollback ausführen muss, kann das Rollback nicht unterbrochen werden. Wenn es 10 Minuten dauert, dauert es 10 Minuten und Sie können nichts dagegen tun. Selbst ein Neustart des Servers ist nicht hilfreich, da der Wiederherstellungsvorgang den Rollback-Vorgang abschließen muss.

Um welche spezifische Gründe für Ihren Fall zu beantworten, müssen Sie sich selbst untersuchen.

54
Remus Rusanu
sp_who2 'active'

Überprüfen Sie die Werte unter CPUTime und DiskIO . Beachten Sie die SPID des Prozesses, der einen vergleichsweise großen Wert hat.

kill {SPID value}
90
Mudassir Hasan

Führen Sie zuerst den folgenden Befehl aus:

sp_who2

Danach führen Sie den unten stehenden Befehl mit SPID aus, den Sie von oben erhalten haben:

KILL {SPID value}
33
user1608817

Dies ist eine Art dumme Antwort, aber sie funktioniert zumindest in meinem Fall zuverlässig: Wenn im Management Studio die Abfrage "Abfrage abbrechen" nicht angehalten wird, klicke ich nur, um das aktuelle SQL-Dokument zu schließen. es fragt mich, ob ich die Abfrage abbrechen möchte, ich sage ja, und siehe da, die Ausführung wird in wenigen Sekunden beendet. Danach fragt es mich, ob ich das Dokument vor dem Schließen speichern möchte. An dieser Stelle kann ich auf Abbrechen klicken, um das Dokument geöffnet zu halten und weiterarbeiten zu können. Keine Ahnung, was hinter den Kulissen los ist, aber es scheint zu funktionieren.

16
anakic

Sie können eine Tastenkombination verwenden ALT + Break um die Ausführung der Abfrage zu stoppen. Dies ist jedoch möglicherweise nicht in allen Fällen erfolgreich.

11
Yash Saraiya

Wenn Sie abbrechen und den Lauf sehen

 sp_who2 'active'

(Der Aktivitätsmonitor ist auf dem alten SQL Server 2000 FYI nicht verfügbar.) 

Finde die SPID, die du töten möchtest, z. 81 

Kill 81

Führen Sie den sp_who2 'active' erneut aus, und Sie werden wahrscheinlich feststellen, dass er schläft ... zurückrollen

Um den STATUS zu erhalten, muss der KILL erneut ausgeführt werden 

Kill 81 

Dann erhalten Sie eine solche Nachricht

 SPID 81: transaction rollback in progress. Estimated rollback completion: 63%. Estimated time remaining: 992 seconds.
8
Tom Stickel

anscheinend auf SQL Server 2008 r2 64bit, mit lang laufender Abfrage von IIS scheint das Kill-SPID nicht zu funktionieren, die Abfrage wird einfach immer wieder neu gestartet. und es scheint, die Spids wiederzuverwenden. Die Abfrage führt dazu, dass SQL Server ständig 35% ige CPU-Leistung beansprucht und die Website hängt. Ich vermute, bc/kann nicht auf andere Abfragen zum Anmelden reagieren

1
Joseph McKinley

Meines Erachtens hing mein SQL, als ich versuchte, es zu schließen, während ich endlos rannte. Was ich also tat, ist, ich öffne meinen Task-Manager und beende meine SQL-Abfrage. Dies hat meine SQL angehalten und neu gestartet. 

1
bot

Wenn das rote "Stop" -Feld nicht funktioniert, drücken Sie einfach die "Strg + Pause" -Taste auf der Tastatur. 

Wenn Sie SQL Server unter Linux ausführen, können Sie Ihrem Systray eine App mit dem Namen "killall" .__ hinzufügen. Klicken Sie einfach auf die Schaltfläche "killall" und dann auf das Programm, das in einer Schleife abgefangen wird, und es wird beendet das Programm. Hoffentlich hilft das. 

1
Aubrey Love

Ich habe seit langer Zeit an demselben Leiden gelitten. Dies ist insbesondere der Fall, wenn Sie mit einem Remote-Server verbunden sind (was möglicherweise langsam ist) oder wenn die Netzwerkverbindung schlecht ist. Ich zweifle, ob Microsoft weiß, was die richtige Antwort ist.

Aber da habe ich versucht die Lösung zu finden. Nur ein Laienansatz funktionierte 

  • Klicken Sie auf die Schaltfläche "Schließen" über der Registerkarte der Abfrage, an der Sie leiden. Nach einer Weile (wenn Microsoft nicht hart auf Sie ist !!!), wird möglicherweise ein Fenster mit der Frage angezeigt

"Die Abfrage wird gerade ausgeführt. Möchten Sie die Abfrage abbrechen?"

  • Klicken Sie auf "Ja"

  • Nach einer Weile werden Sie gefragt, ob Sie diese Abfrage speichern möchten oder nicht.

  • Klicken Sie auf "Abbrechen".

Und post, vielleicht ist Ihr Studio wieder stabil, um Ihre Anfrage auszuführen.

Im Hintergrund wird das Abfragefenster mit der Verbindung getrennt. Wenn Sie die Abfrage erneut ausführen, dauert es jedoch einige Zeit, bis der Remote-Server erneut verbunden ist. Aber glauben Sie mir, dieser Kompromiss ist weitaus besser als das Leiden des Timers, der für die Ewigkeit läuft. 

PS: Das funktioniert für mich, Kudos, wenn es auch für dich funktioniert. !!!

0
Maulik Modi