Symptome
Angenommen, Sie haben Microsoft SQL Server 2014, 2016 oder 2017 installiert. Möglicherweise tritt eines oder mehrere der folgenden Probleme auf:
- Der SQL Server instance scheint nicht zu reagieren, und es tritt der Fehler "Planer ohne Ergebnis" auf. Sie müssen den Server zur Wiederherstellung möglicherweise neu starten.
- Das Rollback einer Transaktion kann sehr lange dauern. In den meisten Fällen kann die Datenbank durch einen Neustart der Instance viel schneller wiederhergestellt werden als nach dem Rollback. Beachten Sie, dass es viele Gründe gibt, warum ein Rollback lange dauern kann. Weitere Informationen zum Überwachen von Rollbacks vor dem Neustart finden Sie im Abschnitt "Weitere Informationen" weiter unten.
- Bei Spinlocks wie SOS_OBJECT_STORE können hohe Wartezeiten auftreten.
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 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 kumulative Update für SQL Server 2016
Neuestes kumulative 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. Wir empfehlen, 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. In Tabelle 1 im folgenden Artikel finden Sie weitere Informationen zum neuesten Service Pack und zum neuesten kumulativen Update.
Ermitteln der Version, Edition und Updatestufe von SQL Server und seinen Komponenten
Es gibt viele Gründe, warum ein Rollback lange dauern kann, z. B. eine langwierige Transaktion, 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 Ursache eines langsamen Rollbacks ist, empfehlen wir, die folgenden Techniken zu verwenden, um den Fortschritt des Rollbackvorgangs zu überwachen:
- Identifizieren Sie in sys.dm_exec_requests den session_id, dessen Befehl auf "KILLED/ROLLBACK" festgelegt ist, und stellen Sie sicher, dass die Sitzung sowohl E/A als auch CPU-Zeit ansammelt, um den Fortschritt anzuzeigen. Wenn sich die E/A nicht ändert, kann dies ein Hinweis darauf sein, dass das in diesem Artikel beschriebene Problem auftritt.
- Fragen Sie sys.dm_tran_database_transactions ab, um den aktuellen Status des Rollbacks mithilfe einer Abfrage wie der folgenden zu ermitteln:
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 s
ON t.transaction_id=s.transaction_id - WHERE t.database_id=db_id('<Database Name') and s.session_id=<Session_id Durchführen des Rollbackvorgangs>
Hinweis:
In der obigen Abfrage
database_transaction_next_undo_lsn ist die LSN des nächsten rückgängig zu machenden Datensatzes. 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, einige Momentaufnahmen der vorherigen Abfrage innerhalb eines vordefinierten Intervalls zu erstellen und dann das Delta der in database_transaction_next_undo_lsn verarbeiteten LSNs innerhalb dieses Intervalls zu verwenden und die benötigte Zeit zu extrapolieren, um die Zeit abzuschätzen, die benötigt wird, bis die database_transaction_next_undo_lsn den database_transaction_begin_lsn erreicht.
Wenn das Rollback zwischen den einzelnen Momentaufnahme mit angemessener Geschwindigkeit voranschreitet, empfehlen wir, das Rollback eigenständig abzuschließen, ohne das SQL Server instance neu zu starten.
Weitere Informationen zur langwierigen Wiederherstellung finden Sie in den folgenden Artikeln:
- Grundlegendes zur Wiederherstellungsleistung in SQL Server
- SQL Server (2000, 2005, 2008): Wiederherstellung/Rollback dauert länger als erwartet
- Wie sich eine Protokolldateistruktur auf die Datenbankwiederherstellungszeit auswirken kann
- Nachverfolgen des Fortschritts der Datenbankwiederherstellung mithilfe von Informationen von 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.