Symptome
Angenommen, Sie haben Microsoft SQL Server 2014, 2016 oder 2017 installiert. Möglicherweise treten eines oder mehrere der folgenden Probleme auf:
- Die SQL Server instance reagiert nicht, und es tritt ein Fehler vom Typ "Nicht liefernder Scheduler" auf. Möglicherweise müssen Sie den Server neu starten, um die Wiederherstellung durchzuführen.
- Das Rollback einer Transaktion kann lange dauern. In den meisten Fällen kann die Datenbank durch einen Neustart des instance viel schneller wiederhergestellt werden als beim Rollback. Beachten Sie, dass es viele Gründe gibt, warum ein Rollback sehr lange dauert. Ausführliche Informationen zum Überwachen von Rollbacks vor dem Neustart finden Sie weiter unten im Abschnitt "Weitere Informationen".
- Bei Spinlocks wie SOS_OBJECT_STORE werden möglicherweise hohe Wartezeiten angezeigt.
Lösung
Dieses Problem wurde in den folgenden kumulativen Updates für SQL Server behoben:
Kumulatives Update 9 für SQL Server 2017
Kumulatives Update 2 für SQL Server 2016 SP2
Informationen zu kumulativen Updates für SQL Server:
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:
Neuestes kumulative Update für SQL Server 2017
Neuestes kumulatives Update für SQL Server 2016
Neuestes kumulatives Update für SQL Server 2014
Service Pack-Informationen für SQL Server
Dieses Update ist im folgenden Service Pack für SQL Server behoben:
Service Pack 3 für SQL Server 2014
Informationen zu Service Packs für SQL Server:
Service Packs sind kumulativ. Jedes neue Service Pack enthält neben neuen Updates alle Updates früherer Service Packs. Es wird empfohlen, das neueste Service Pack und das neueste kumulative Update für dieses Service Pack anzuwenden. 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 zum neuesten Service Pack und zum neuesten kumulativen Update zu finden.
Ermitteln der Version, Edition und Updateebene von SQL Server und der zugehörigen Komponenten
Es gibt viele Gründe, warum ein Rollback sehr lange dauern kann, z. B. eine Transaktion mit langer Ausführungszeit, eine große Anzahl von VLFs in der Transaktionsprotokolldatei, langsame E/A usw. Um zu überprüfen, ob das in diesem Artikel beschriebene Problem die Grundursache eines langsamen Rollbacks ist, empfehlen wir, dass die folgenden Techniken verwendet werden, um den Fortschritt des Rollbackvorgangs zu überwachen:
- Identifizieren Sie sys.dm_exec_requests die session_id, deren Befehl auf "KILLED/ROLLBACK" festgelegt ist, und stellen Sie sicher, dass die Sitzung sowohl E/A- als auch CPU-Zeit ansammelt, die den Fortschritt anzeigt. Wenn sich E/A nicht ändert, kann dies ein Hinweis darauf sein, dass das in diesem Artikel beschriebene Problem auftritt.
- Abfrage sys.dm_tran_database_transactions , um den aktuellen Status des Rollbacks mithilfe einer Abfrage wie der folgenden zu identifizieren:
Hinweis
- SELECT getdate() as CurrentTime, 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)
- FROM sys.dm_tran_database_transactions t
- JOIN-sys.dm_exec_requests
ON t.transaction_id=s.transaction_id - WHERE t.database_id=db_id('<Datenbankname') und s.session_id=<Session_id ausführen des Rollbackvorgangs>
Hinweis:
In der obigen Abfrage:
database_transaction_next_undo_lsn ist die LSN des nächsten Datensatzes, der rückgängig werden soll. database_transaction_begin_lsn ist die LSN des Anfangsdatensatzes für die Transaktion im Transaktionsprotokoll.
database_transaction_next_undo_lsn sollte mit jedem Momentaufnahme dieser Abfrage abnehmen. Das Rollback wird erfolgreich abgeschlossen, wenn die database_transaction_next_undo_lsn database_transaction_begin_lsn erreicht.
Das Ziel besteht darin, innerhalb eines vordefinierten Intervalls einige Momentaufnahmen der vorherigen Abfrage zu erstellen und dann das Delta der LSNs zu verwenden, die in database_transaction_next_undo_lsn innerhalb dieses Intervalls verarbeitet wurden, und die benötigte Zeit zu extrapolieren, um die Zeit zu schätzen, die der database_transaction_next_undo_lsn benötigen wird, um die database_transaction_begin_lsn zu erreichen.
Wenn das Rollback zwischen den einzelnen Momentaufnahme in angemessener Geschwindigkeit voranschreitet, wird empfohlen, dass der Rollback eigenständig ausgeführt werden kann, ohne die SQL Server instance neu zu starten.
Weitere Informationen zur Wiederherstellung mit langer Laufzeit finden Sie in den folgenden Artikeln:
- Grundlegendes zur Wiederherstellungsleistung in SQL Server
- SQL Server (2000, 2005, 2008): Wiederherstellung/Rollback dauert länger als erwartet
- Auswirkungen einer Protokolldateistruktur auf die Wiederherstellungszeit der Datenbank
- Nachverfolgen des Fortschritts der Datenbankwiederherstellung mithilfe von Informationen aus der DMV
Status
Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.
Referenzmaterial
Informieren Sie sich über die Terminologie, die Microsoft zum Beschreiben von Softwareupdates verwendet.