MSSQLSERVER_856

Anwendungsbereich: JaSQL Server (alle unterstützten Versionen)

Details

attribute Wert
Produktname SQL Server
Ereignis-ID 856
Ereignisquelle MSSQLSERVER
Komponente SQLEngine
Symbolischer Name BAD_MEMORY_CLEAN_DATABASE_PAGE
Meldungstext Von SQL Server wurde eine Beschädigung des Hardwarespeichers in der %ls-Datenbank mit Datei-ID %u, Seiten-ID %u, Speicheradresse 0x%I64x festgestellt. Die Seite wurde erfolgreich wiederhergestellt.

Erklärung

Diese Meldung deutet darauf hin, dass SQL Server in einem zwischengespeicherten Objekt außerhalb des Pufferpools eine fehlerhafte Arbeitsspeicherseite gefunden hat. Diese Meldung wird für Systeme ausgelöst, die die Wiederherstellung nach Arbeitsspeicherfehlern unterstützen. SQL Server korrigiert diese Arbeitsspeicherfehler durch Verwerfen der beschädigten Arbeitsspeicherseiten, die nicht geändert werden, und protokolliert diese Fehlermeldung. Wenn die beschädigte Arbeitsspeicherseite geändert (modifiziert) wurde, wird der Fehler 824 ausgelöst (MSSQLSERVER_824).

Benutzeraktion

Sie sollten Hardware- oder Systemprüfungen durchführen, um zu ermitteln, ob ein Problem mit dem Arbeitsspeicher oder der CPU besteht. Stellen Sie sicher, dass Sie über alle Systemtreiber verfügen und Ihr Betriebssystem und Ihre Hardware auf dem neusten Stand sind. Führen Sie ggf. eine beliebige Diagnose eines Hardwareherstellers einschließlich speicherbezogener Tests durch. Wenn dieser Fehler angezeigt wird, sollten Sie DBCC CHECKDB für alle Datenbanken in dieser Instanz ausführen.

Weitere Informationen

Auf Computern mit neuerer Hardware, auf denen Windows Server 2012 oder eine höhere Version ausgeführt wird, kann die Hardware das Betriebssystem und die Anwendungen darüber benachrichtigen, dass Arbeitsspeicherseiten (Betriebssystemseiten) als „fehlerhaft“ oder „beschädigt“ gekennzeichnet sind. Anwendungen wie SQL Server können diese Benachrichtigungen zu fehlerhaften Arbeitsspeicherseiten mithilfe der folgenden APIs registrieren:

  • GetMemoryErrorHandlingCapabilities
  • RegisterBadMemoryNotification
  • BadMemoryCallbackRoutine

SQL Server fügt Unterstützung für diese Benachrichtigungen in Microsoft SQL Server 2012 (11.x) und höheren Versionen hinzu. Während des Starts von SQL Server überprüft SQL Server, ob die Hardware dieses neue Feature unterstützt. Außerdem wird Ihnen im Fehlerprotokoll die folgende Meldung angezeigt:

<Datetime> Der Server-Computer unterstützt die Wiederherstellung nach einem Arbeitsspeicherfehler. SQL memory protection is enabled to recover from memory corruption. (Der Server-Computer unterstützt die Wiederherstellung nach einem Arbeitsspeicherfehler. Der SQL-Speicherschutz ist aktiviert, um die Wiederherstellung nach einer Arbeitsspeicherbeschädigung zu ermöglichen.)

Derzeit führt nur der Pufferpool Aktionen aus, wenn SQL Server diese Benachrichtigungen empfängt. Wenn eine Benachrichtigung empfangen wird, muss SQL Server den gesamten Pufferpool durchlaufen und die Adressen der zugeordneten Puffer ermitteln. Dann verwendet SQL Server die QueryWorkingSetEX-API, um zu überprüfen, ob eine der Arbeitsspeicherseiten, die die Datenseite stützen, als „fehlerhaft“ gekennzeichnet ist. Die fehlerhaften Member der Ausgabestruktur PSAPI_WORKING_SET_EX_BLOCK, die dieser Arbeitsspeicherseite zugeordnet werden kann, werden auf 1 festgelegt, wenn ein Schaden gemeldet wird.

Wenn der Pufferpool oder die Datenseite zum jeweiligen Zeitpunkt nicht geändert wird oder keine E/A-Prozesse verarbeitet, kann SQL Server die Datenseite verwerfen und den Commit rückgängig machen. Dann protokolliert SQL Server die folgende Meldung:

Von SQL Server wurde eine Beschädigung des Hardwarespeichers in der %ls-Datenbank mit Datei-ID %u, Seiten-ID %u, Speicheradresse 0x%I64x festgestellt. Die Seite wurde erfolgreich wiederhergestellt.

Wenn diese Datenseite nochmals für Abfragen benötigt wird, kann der Pufferpool die Datenseite wieder vom Datenträger lesen und die Inhalte wieder an den Pufferpool übertragen. Außerdem kann sich die auf dem Datenträger gespeicherte Version der Seite in einem beschädigten Zustand befinden. In diesem Fall kann SQL Server zusätzliche Fehler protokollieren, z. B. Fehler 824.

Wenn die fehlerhafte Seite nicht vom Pufferpool, sondern von einem anderen zwischengespeicherten Objekt oder einer zwischengespeicherten Struktur verwendet wird, protokolliert SQL Server die folgende Meldung:

Es wurde eine nicht behebbare Beschädigung des Hardwarespeichers festgestellt. Das System kann instabil werden. Please check the Windows event log for more details (Es wurde eine nicht behebbare Beschädigung des Hardwarespeichers festgestellt. Das System kann instabil werden. Weitere Informationen finden Sie im Windows-Ereignisprotokoll.)

Wenn der Server Arbeitsspeicherfehler meldet, wenden Sie sich an den Hersteller der Computerhardware, und ergreifen Sie passende Maßnahmen. Sie können beispielsweise eine Arbeitsspeicherdiagnose durchführen, das BIOS und die Firmware aktualisieren sowie fehlerhafte Arbeitsspeichermodule ersetzen.

Sie können das SQL Server-Ablaufverfolgungsflag 849 verwenden, um zu verhindern, dass SQL Server beim Betriebssystem für Benachrichtigungen zu Arbeitsspeicherfehlern registriert wird. Beachten Sie jedoch, dass das Aktivieren des Ablaufverfolgungsflags 849 verhindert, dass SQL Server vom Betriebssystem Benachrichtigungen zu Fehlern im Arbeitsspeicher erhält. Daher wird empfohlen, dieses Ablaufverfolgungsflag im Normalfall nicht zu verwenden.

Beachten Sie außerdem, dass SQL Server diese Benachrichtigungen standardmäßig auf unterstützter Hardware empfängt.

Außerdem sollte Ihnen bewusst sein, dass der Lazy Writer-Systemprozess konstante Seiten nicht überprüft, wenn sich SQL Server für diese Benachrichtigungen über Arbeitsspeicherfehler registriert. Weitere Informationen zu Überprüfungen von konstanten Seiten finden Sie unter Behandeln von Meldung 832 (konstante Seite hat sich geändert) in SQL Server.