KB4338890 – FIX: Fehler "Planer ohne Ergebnis" und SQL Server scheint in SQL Server 2014, 2016 und 2017 nicht zu reagieren

Gilt für
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

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

Weitere Informationen

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:

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.