Problembeschreibung
Angenommen, Sie haben Microsoft SQL Server 2014, 2016 oder 2017 installiert. Sie können eines oder mehrere der folgenden Probleme auftreten:
-
Die SQL Server-Instanz wird nicht mehr angezeigt, und es wird ein Fehler vom Typ "nicht-yielding-Planer" aufgetreten. Möglicherweise müssen Sie den Server neu starten, um ihn wiederherzustellen.
-
Das Ausführen des Rollbacks einer Transaktion kann viel Zeit in Anspruch nehmen. In den meisten Fällen kann das erneute Starten der Instanz die Datenbank wesentlich schneller wiederherstellen als das Rollback. Beachten Sie, dass es viele Gründe gibt, warum ein Rollback viel Zeit in Anspruch nehmen kann, wenn Sie weitere Informationen zum Überwachen von Rollbacks finden, bevor Sie versuchen, den Neustart durchzuführen.
-
Möglicherweise werden auf Spinlocks, beispielsweise SOS_OBJECT_STORE, höchst Wartezeiten angezeigt.
Fehlerbehebung
Dieses Problem wurde in den folgenden kumulativen Updates für SQL Server behoben:
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Schauen Sie sich die neuesten kumulativen Updates für SQL Server an:
Neuestes Kumulatives Update für SQL Server 2017
Service Pack-Informationen für SQL Server
Dieses Update wurde im folgenden Service Pack für SQL Server behoben:
Service Packs sind kumulativ. Jedes neue Service Pack enthält neben neuen Updates alle Updates früherer Service Packs. Wir empfehlen, das neueste Service Pack und das neueste kumulative Update für dieses Service Pack zu verwenden. Sie müssen also keine älteren Versionen eines Service Packs installieren, bevor Sie das neueste Service Pack installieren. Verwenden Sie Tabelle 1 im folgenden Artikel, um weitere Informationen zu den neuesten Service Packs und dem neuesten kumulativen Update zu finden.
Ermitteln der Versions-, Editions-und Update Ebene von SQL Server und dessen Komponenten
Weitere Informationen
Es gibt viele Gründe, warum ein Rollback lange dauern kann, beispielsweise eine Transaktion mit langer Laufzeit, eine große Anzahl von VLFs in der Transaktionsprotokolldatei, langsame e/a-Vorgänge usw. Um zu überprüfen, ob das in diesem Artikel beschriebene Problem die Ursache eines langsamen Rollbacks ist, empfehlen wir, die folgenden Techniken zu verwenden, um den Fortschritt des Rollback-Vorgangs zu überwachen:
-
Identifizieren Sie in sys.dm_exec_requestsden session_id, dessen Befehl auf "killed/Rollback" festgelegt ist, und stellen Sie sicher, dass die Sitzung sowohl IO-als auch CPU-Zeit akkumuliert, die den Fortschritt angibt. Wenn IO nicht geändert wird, ist es möglicherweise ein Hinweis darauf, dass das in diesem Artikel beschriebene Problem auftritt.
-
Abfrage sys.dm_tran_database_transactions , um den aktuellen Zustand des Rollbacks mithilfe einer Abfrage wie der folgenden zu ermitteln:
Wählen Sie GETDATE () als aktuelle Zeit, database_transaction_next_undo_lsn, database_transaction_begin_lsn, t.transaction_id, database_transaction_begin_time, database_transaction_log_record_count, db_name (t.database_id) aus.
Ab sys.dm_tran_database_transactions t
Teilnehmen an sys.dm_exec_requests s Auf t.TRANSACTION_ID = s.TRANSACTION_ID
Wobei t.database_id = DB_ID ("<Datenbankname") und s.session_id =<session_id Durchführen des Rollback-Vorgangs>
Hinweis:
In der obigen Abfrage
database_transaction_next_undo_lsn ist die LSN des nächsten Datensatzes, den Sie rückgängig machen möchten. database_transaction_begin_lsn ist die LSN des BEGIN-Datensatzes für die Transaktion im Transaktionsprotokoll.
database_transaction_next_undo_lsn sollten mit jedem Snapshot dieser Abfrage abnehmen. Rollback wird erfolgreich abgeschlossen, wenn der database_transaction_next_undo_lsn database_transaction_begin_lsn erreicht.
Das Ziel besteht darin, einige Schnappschüsse der vorherigen Abfrage innerhalb eines vorgegebenen Intervalls zu erstellen und dann das Delta des LSNs zu verwenden, das in database_transaction_next_undo_lsn innerhalb dieses Intervalls verarbeitet wird, und die Zeit zu extrapolieren, die erforderlich ist, um die Zeit zu schätzen, die es dauert, bis die database_transaction_next_undo_lsn den database_transaction_begin_lsnerreicht.
Wenn sich der Rollback zwischen den einzelnen Momentaufnahmen zu einem angemessenen Tempo entwickelt, empfehlen wir, das Rollback für sich selbst abzuschließen, ohne die SQL Server-Instanz neu zu starten.
Weitere Informationen zur langlebigen Wiederherstellung finden Sie in den folgenden Artikeln:
-
SQL Server (2000, 2005, 2008): Wiederherstellung/Rollback dauert länger als erwartet
-
Auswirkungen einer Protokolldatei Struktur auf die Wiederherstellungszeit der Datenbank
-
Nachverfolgen des Daten Bank Wiederherstellungsstatus mithilfe von DMV-Informationen
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.
Informationsquellen
Erfahren Sie mehr über die Terminologie, mit der Microsoft Softwareupdates beschreibt.