Wie kann ich eine angehaltene SQL Server-Transaktion beenden, die auf IO_COMPLETION wartet?

8

Wir haben eine Transaktion, die seit mehr als 5 Stunden läuft. Wir haben nicht mehr genügend Speicherplatz. Die Sitzung wurde beendet, wartet jedoch noch auf IO_COMPLETION. Eigentlich hat sich der wait_type gerade in PAGEIOLATCH_EX geändert. Wie kann ich die angehaltene SQL Server-Transaktion beenden? Ich mache mir keine Sorgen über den Verlust von Daten, da alle Daten neu gefüllt werden können.

session_id: 54
STATUS: suspended
blocked by: 0
wait_type: PAGEIOLATCH_EX
Elapsed Time (in Sec): 19750.420000
open_transaction_count: 2
Tarzan
quelle
2
Lassen Sie es zu Ende gehen. Andernfalls dauert es einige Zeit, bis ein Rollback durchgeführt wird, wenn Sie die Stromversorgung herausziehen oder den SQL Server-Dienst neu starten. Wie wäre es, wenn Sie die Datenbank aus der letzten Sicherung wiederherstellen und die Daten dann neu füllen, da Sie sich keine Sorgen über Datenverluste machen? Darüber hinaus können Sie KILL 54 WITH STATUSONLYherausfinden, wie lange das Rollback dauern wird.
Kin Shah
Ich habe KILL 54 WITH STATUSONLY ausgeführt und Folgendes erhalten: SPID 54: Transaktions-Rollback läuft. Geschätzter Rollback-Abschluss: 0%. Geschätzte verbleibende Zeit: 0 Sekunden. Ich glaube dem 0 Sekunden Teil nicht.
Tarzan
2
Rollback ist eine Operation mit einem Thread. Wenn Ihre ursprüngliche Transaktion beispielsweise mit 8 Threads parallel ausgeführt wurde, bis sie beendet wurde, kann das Rollback 8-mal länger dauern.
James Z
@ Tarzan KILL .. WITH STATUSONLYist nicht genau und ich verstehe Ihren Standpunkt. Kannst du es versuchen Alter database .. set OFFLINE or single_User WITH ROLLBACK IMMEDIATE?
Kin Shah
2
Am Ende ließ ich es über Nacht laufen. Es war endlich fertig. Woohoo! Vielen Dank für Ihren Kommentar.
Tarzan

Antworten:

1

Führen Sie dies das nächste Mal aus sp_WhoIsActive( Download | Dokumentation ) und sehen Sie, wer was ausführt, und überprüfen Sie die Logik. Überprüfen Sie, ob die TSQL für eine schnellere Ausführung optimiert werden kann, oder zerlegen Sie sie möglicherweise in kleinere Transaktionen.

Ich hatte Fälle, in denen das Transaktionsprotokoll einer fehlerhaften Abfrage durch einen Berichtersteller, Datenlader usw. das Transaktionsprotokoll größer als die Datendateigröße vergrößerte, und es ist normalerweise eine schlecht geschriebene Abfrage mit schlechter Leistung, die nicht optimiert oder aufgeteilt wurde Bei kleineren Transaktionen muss nach Abschluss der Transaktion freier Speicherplatz zurückgegeben werden. Dies war SIMPLEübrigens auch in einer Wiederherstellungsmodelldatenbank der Fall. Bei FULLWiederherstellungsmodelldatenbanken müssten Transaktionsprotokollsicherungen abgeschlossen werden, damit der Transaktionsprotokollspeicherplatz festgeschriebener Transaktionen wiederverwendet werden kann.

Das Hauptproblem ist wahrscheinlich die Abfrage. Wenn Sie also feststellen, wer was tut, sich an sie wenden und das Problem mit Ihren Ergebnissen melden, wird der Druck auf sie ausgeübt, ihre Logik zu korrigieren, um den Server-Speicherplatz für diese Festplattenpartition nicht zu belasten - hoffentlich ist dies der Fall Nicht Ihre Logik, aber wenn ja, versuchen Sie, die Logik zu optimieren, um die Leistung abzufragen.

Zuhälter Saft IT
quelle