PRB: Zusätzliche SQL Server-Diagnose hinzugefügt, um nicht berichtete E/A-Probleme aufzuspüren

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 826433 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
826433 PRB: Additional SQL Server Diagnostics Added to Detect Unreported I/O Problems
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Probleme mit dem Betriebssystem, dem Treiber oder der Hardware zu Schreibverlustkonditionen oder zu veralteten Lesekonditionen führen, werden möglicherweise Fehlermeldungen zur Datenintegrität wie beispielsweise Fehler 605, 823, 3448 angezeigt. Möglicherweise werden ähnliche Fehlermeldungen wie die folgenden Beispiele angezeigt:
2003-07-24 16:43:04.57 spid63 Getpage: bstat=0x9, sstat=0x800, Cache
2003-07-24 16:43:04.57 spid63 pageno ist/sollte sein: objid ist/sollte sein:
2003-07-24 16:43:04.57 spid63 (1:7040966)/(1:7040966) 2093354622/2039782424
2003-07-24 16:43:04.57 spid63 ... IAM gibt an, dass die Seite diesem Objekt zugewiesen ist
2003-07-24 16:52:370,67 spid63 Fehler: 605, Schweregrad: 21, Status: 1
2003-07-24 16:52:37.67 spid63 Es wurde versucht, die logische Seite (1:7040966) in der 'Pubs'-Datenbank abzurufen, die jedoch zum 'Authors'-Objekt und nicht zum 'Titles'-Objekt gehört.
2003-07-24 16:52:40.99 spid63 Fehler: 3448, Schweregrad: 21, Status: 1
2003-07-24 16:52:40.99 spid63 Protokolldatensatz (63361:16876:181) für Transaktions-ID (0:159696956) auf Seite (1:7040977), 'pubs'-Datenbank (Datenbank-ID 12) konnte nicht rückgängig gemacht werden. Seiteninformation: LSN = (63192:958360:10), TYP = 2. Protokollinformation: OpCode = 2, Kontext 1..
2003-07-09 14:31:35.92 spid66 Fehler: 823, Schweregrad: 24, Status: 2
2003-07-09 14:31:35.92 spid66 E/A-Fehler (falsche Seiten-ID) während Lesevorgang bei Offset 0x00000016774000 in Datei 'h:\sql\MSSQL\data\tempdb.mdf' festgestellt..

Lösung

Service Pack-Informationen

Installieren Sie das neueste Service Pack für Microsoft SQL Server 2000, um dieses Problem zu beheben. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
290211 INFO: So erhalten Sie das neueste Service Pack für SQL Server 2000

Build-Informationen

Microsoft hat ein SQL Server-Build freigegeben, das die Verfolgungsfähigkeiten erweitert. Diese Fähigkeiten sollen als Hilfe bei der Behebung der im Abschnitt "Problembeschreibung" beschriebenen Fehlermeldungen dienen. Wenn Sie davon ausgehen, dass das Problem nicht in Zusammenhang mit dem Betriebssystem oder der Hardware steht, müssen Sie das Build möglicherweise nicht anwenden.

Die englische Version dieses Builds weist die in der nachstehenden Tabelle aufgelisteten Dateiattribute (oder höher) auf. Datums- und Uhrzeitangaben für diese Dateien sind in der "Coordinated Universal Time" (UTC) angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Die Abweichung zwischen UTC-Zeit und lokaler Zeit können Sie im Systemsteuerungsprogramm Datum/Uhrzeit mithilfe der Registerkarte Zeitzone ermitteln.
      Date         Time   Version         Size             File name
   -------------------------------------------------------------------------
   31-May-2003  18:45  2000.80.818.0      78,400 bytes  Console.exe
   25-Jun-2003  01:01  2000.80.818.0      33,340 bytes  Dbmslpcn.dll
   25-Apr-2003  02:12                    786,432 bytes  Distmdl.ldf
   25-Apr-2003  02:12                  2,359,296 bytes  Distmdl.mdf
   30-Jan-2003  01:55                        180 bytes  Drop_repl_hotfix.sql
   23-Jun-2003  22:40  2000.80.837.0   1,557,052 bytes  Dtsui.dll
   23-Jun-2003  22:40  2000.80.837.0     639,552 bytes  Dtswiz.dll
   24-Apr-2003  02:51                    747,927 bytes  Instdist.sql
   03-May-2003  01:56                      1,581 bytes  Inst_repl_hotfix.sql
   08-Feb-2003  06:40  2000.80.765.0      90,692 bytes  Msgprox.dll
   01-Apr-2003  02:07                      1,873 bytes  Odsole.sql
   05-Apr-2003  01:46  2000.80.800.0      62,024 bytes  Odsole70.dll
   07-May-2003  20:41  2000.80.819.0      25,144 bytes  Opends60.dll
   02-Apr-2003  21:48  2000.80.796.0      57,904 bytes  Osql.exe
   02-Apr-2003  23:15  2000.80.797.0     279,104 bytes  Pfutil80.dll
   22-May-2003  22:57                     19,195 bytes  Qfe469571.sql
   11-Jul-2003  17:04                  1,084,147 bytes  Replmerg.sql
   04-Apr-2003  21:53  2000.80.798.0     221,768 bytes  Replprov.dll
   08-Feb-2003  06:40  2000.80.765.0     307,784 bytes  Replrec.dll
   11-Jul-2003  16:56                  1,085,925 bytes  Replsys.sql
   01-Jun-2003  01:01  2000.80.818.0     492,096 bytes  Semobj.dll
   31-May-2003  18:27  2000.80.818.0     172,032 bytes  Semobj.rll
   29-May-2003  00:29                    115,944 bytes  Sp3_serv_uni.sql
   01-Jun-2003  01:01  2000.80.818.0   4,215,360 bytes  Sqldmo.dll
   07-Apr-2003  17:44                     25,172 bytes  Sqldumper.exe
   19-Mar-2003  18:20  2000.80.789.0      28,672 bytes  Sqlevn70.rll
   02-Jul-2003  00:18  2000.80.834.0     180,736 bytes  Sqlmap70.dll
   08-Feb-2003  06:40  2000.80.765.0      57,920 bytes  Sqlrepss.dll
   01-Aug-2003  00:50  2000.80.847.0   7,594,065 bytes  Sqlservr.exe
   25-Jul-2003  21:44  2000.80.845.0     590,396 bytes  Sqlsort.dll
   08-Feb-2003  06:40  2000.80.765.0      45,644 bytes  Sqlvdi.dll
   25-Jun-2003  01:01  2000.80.818.0      33,340 bytes  Ssmslpcn.dll
   01-Jun-2003  01:01  2000.80.818.0      82,492 bytes  Ssnetlib.dll
   01-Jun-2003  01:01  2000.80.818.0      25,148 bytes  Ssnmpn70.dll
   01-Jun-2003  01:01  2000.80.818.0     158,240 bytes  Svrnetcn.dll
   31-May-2003  18:59  2000.80.818.0      76,416 bytes  Svrnetcn.exe
   30-Apr-2003  23:52  2000.80.816.0      45,132 bytes  Ums.dll
   02-Jul-2003  00:19  2000.80.834.0      98,816 bytes  Xpweb70.dll
Hinweis: Aufgrund von Dateiabhängigkeiten enthält der aktuellste Hotfix oder das aktuellste Feature, der/das diese Dateien enthält, möglicherweise noch weitere Dateien.

Microsoft hat bestätigt, dass unter seltenen und schweren E/A-Lasten einige Hardwareplattformen eine veraltete Lesekondition zurückgeben können. Wenn die erweiterte Diagnose eine mögliche Schreibverlustkondition oder veraltete Lesekondition anzeigt, wenden Sie sich an den Händler, bei dem Sie Ihre Hardware bezogen haben, um eine unverzügliche Nachverfolgung und eine Überprüfung mit dem Dienstprogramm SQLIOStress durchführen zu lassen.

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.

Dieses Problem wurde erstmals in Microsoft SQL Server 2000 Service Pack 4 behoben.

Weitere Informationen

Wenn eine der im Abschnitt "Problembeschreibung" erwähnten Fehlermeldungen angezeigt wird und nicht mit einem Ereignis, wie beispielsweise einem Fehler des physischen Laufwerks, zu erklären ist, überprüfen Sie alle bekannten Probleme mit SQL Server, dem Betriebssystem, den Treibern und der Hardware. Zu diesem Build wurde eine zusätzliche SQL Server-Diagnose hinzugefügt, um externe E/A-Probleme leichter aufspüren zu können. Die zusätzliche Diagnose versucht Ihnen Informationen zu den folgenden zwei Konditionen zu liefern:
  • Schreibverlust: Es erfolgt ein erfolgreicher Aufruf der WriteFile-API, aber das Betriebssystem, ein Treiber oder der Cache-Controller speichert die Daten nicht korrekt auf dem physikalische Medium, obwohl SQL Server die Information erhält, dass das Schreiben erfolgreich war.
  • Veraltetes Lesen: Es erfolgt ein erfolgreicher Aufruf der ReadFile-API, aber das Betriebssystem, ein Treiber oder der Cache-Controller gibt fälschlicherweise eine ältere Version der Daten zurück.
Microsoft hat beispielsweise bestätigt, dass Szenarios auftreten, in denen der Aufruf einer WriteFile-API erfolgreich zurückgegeben wird, jedoch beim sofortigen erfolgreichen Lesen des gleichen Datenblock ältere Daten zurückgegeben werden, einschließlich der Daten, die wahrscheinlich in einem Cache zum Lesen von Hardware gespeichert sind. Dieses Problem tritt manchmal aufgrund eines Problems mit dem Lesecache auf. In anderen Fällen werden Daten, die geschrieben werden sollen, zu keinem Zeitpunkt wirklich auf den physikalischen Datenträger geschrieben.

Zu SQL Server wurde das Ablaufverfolgungs-Flag 818 hinzugefügt, um zusätzliche Diagnosen für diese Probleme zu ermöglichen. Sie können das Ablaufverfolgungs-Flag 818 für den Computer, auf dem SQL Server ausgeführt wird, als Startparameter, -T818, angeben, oder Sie führen die folgende Anweisungen aus:
DBCC TRACEON(818, -1)

Das Ablaufverfolgungs-Flag 818 aktiviert einen in Ihrem Arbeitsspeicher vorliegenden Ringpuffer, der verwendet wird, um die letzten 2.048 erfolgreichen Schreibvorgänge zurückzuverfolgen, die vom SQL Server-Computer durchgeführt wurden, ausschließlich Sortier- und Arbeitsdatei-E/As. Wenn Fehler wie beispielsweise Fehler 605, 823 oder 3448 auftreten, wird der Wert der LSN (Log Sequence Number) des eingehenden Puffers mit der aktuellen Schreibliste verglichen. Wenn die LSN, die während des Lesevorgangs abgerufen wird, älter ist als die, die während des Schreibvorgangs spezifiziert wird, wird im Fehlerprotokoll von SQL Server eine neue Fehlermeldung vermerkt. Die meisten Schreibvorgänge in SQL Server treten als Prüfpunkte oder als Lazy Writes auf. Lazy Write ist eine Hintergrundaufgabe, die asynchrone E/A verwendet. Die Implementierung des Ringpuffers beansprucht nur wenig Leistung, sodass die Auswirkung auf die Leistung des Systems geringfügig ist.

Die folgende Meldung zeigt an (sinngemäß), dass SQL Server vom Aufruf der WriteFile-API oder der ReadFile-API keinen Fehler gemeldet bekommt. Wenn die LSN jedoch erneut angezeigt wurde, war der Wert nicht korrekt:
SQL Server hat ein nicht gemeldetes Lese- oder Schreibproblem auf OS-/Hardwareebene auf Seite (1:75007) in Datenbank 12 festgestellt
zurückgegebene LSN (63361:16876:181), erwartete LSN (63361:16876:500)
Wenden Sie sich an den Hardware-Händler und ziehen Sie das Deaktivieren der Cache-Mechanismen in Betracht, um das Problem zu beheben
An dieser Stelle enthält entweder der Lesecache eine ältere Version der Seite, oder die Daten wurden nicht korrekt auf den physischen Datenträger geschrieben. In beiden Fällen (Schreibverlust oder Lesen veralteter Daten) berichtet SQL Server ein externes Problem mit dem Betriebssystem, dem Treiber oder den Hardwareebenen.

Wenn Fehler 3448 bei dem Versuch auftritt, einen Rollback einer Transaktion mit Fehler 605 oder Fehler 823 durchzuführen, schließt der Computer, auf dem SQL Server ausgeführt wird, automatisch die Datenbank und versucht, die Datenbank zu öffnen und wiederherzustellen. Die erste Seite, auf der Fehler 605 oder Fehler 823 auftritt, gilt als beschädigte Seite, und die Kennung der Seite wird vom Computer, auf dem SQL Server ausgeführt wird, gespeichert. Während der Wiederherstellung (vor der Wiederherstellungsphase), wenn die Kennung der beschädigten Seite gelesen wird, werden die primären Details zum Header der Seite im Fehlerprotokoll von SQL Server vermerkt. Dieser Vorgang ist wichtig, weil er dabei hilft, zwischen den Szenarios "Schreibverlust" und "Lesen veralteter Daten" zu unterscheiden.

In den Szenarios "Lesen veralteter Daten" stellen Sie möglicherweise die folgenden üblichen Verhaltensweisen fest:
  • Wenn die Datenbankdateien geschlossen und anschließend geöffnet werden, werden während der Wiederherstellung die korrekten und zuletzt geschriebenen Daten zurückgegeben.
  • Wenn Sie auf einen Checkpoint stoßen und die Anweisung DBCC DROPCLEANBUFFERS ausführen (um alle Seiten der Datenbank aus dem Speicher zu entfernen), und danach die Anweisung DBCC CHECKDB auf der Datenbank ausführen, werden die zuletzt geschriebenen Daten zurückgegeben.
Die im vorherigen Absatz erwähnten Verhaltensweisen zeigen ein Problem mit dem Lesecache an und werden häufig durch das Deaktivieren des Lesecaches behoben. Die im vorherigen Absatz beschriebenen Aktionen führen in der Regel zu einer Beschädigung des Cache, und das auftretende erfolgreiche Lesen zeigt, dass das physische Medium einwandfrei aktualisiert wurde. Der Schreibverlust tritt auf, wenn die Seite, die gelesen wird, noch die ältere Version der Daten enthält, sogar nachdem das Löschen des Cachemechanismus erzwungen wurde.

Manchmal hängt das Problem möglicherweise nicht mit einem Hardwarecache zusammen. Dann liegt eventuell ein Problem mit einem Filtertreiber vor. In diesem Fall sollten Sie Ihre Software überarbeiten, einschließlich der Sicherungsprogramme und der Antivirussoftware, und überprüfen, ob Probleme mit dem Filtertreiber vorliegen.

Microsoft hat auch Bedingungen festgestellt, die nicht mit den Kriterien von Fehler 605 oder Fehler 823 übereinstimmen, aber durch die gleichen Aktivitäten "Lesen veralteter Daten" oder "Schreibverlust" verursacht werden. In einigen Fällen scheint eine Seite zweimal aktualisiert zu werden, jedoch mit dem gleichen LSN-Wert. Dieses Verhalten kann auftreten, wenn die Objekt-ID und die Seiten-ID korrekt sind (die Seite ist dem Objekt bereits zugeordnet), und an der Seite eine Änderung vorgenommen wurde und an den Datenträger übertragen wurde. Wenn Sie die Seite das nächste Mal abrufen, wird ein älteres Bild zurückgegeben, und anschließend erfolgt eine zweite Änderung. Die SQL Server-Transaktionsprotokoll zeigt an, dass die Seite zweimal mit dem gleichen LSN-Wert aktualisiert wurde. Diese Aktion wird zu einem Problem, wenn Sie versuchen, eine Sequenz eines Transaktionsprotokolls wiederherzustellen, oder es kommt zu Problemen mit der Datenkonsistenz, wie beispielsweise Fehler in Fremdschlüsseln oder fehlende Dateneinträge. Die folgende Fehlermeldung ist ein Beispiel für diese Bedingung:
Fehler: 3456, Schweregrad: 21, Status: 1 Der Protokolleintrag (276666:1664:19) für die Transaktions-ID (0:825853240) auf Seite (1:1787100), 'Authors'-Datenbank (7) konnte nicht rückgängig gemacht werden. Seite: LSN = (276658:4501:9), Typ = 1. Protokoll: OpCode = 4, Kontext 2, PrevPageLSN: (275565:3959:31)..

Folgenden Listen enthalten detailliertere Beschreibungen einiger Szenarios:
  • LSN Sequence		Action
    1			Checkpoint
    2			Begin Transaction
    3			Table created or truncated
    4			Inserts (Pages allocated)
    5			Newly allocated page written to disk by Lazy Writer
    6			Select from table ? Scans IAM chain, newly allocated page read back from disk (LRU | HASHED = 0x9 in getpage message), encounters Error 605 - Invalid Object ID
    7			Rollback of transaction initiated
    
  • LSN Sequence		Action
    1			Checkpoint
    2			Begin Transaction
    3			Page Modification
    4			Page written to disk by Lazy Writer
    5			Page read in for another modification (stale image returned)
    6			Page Modified for a second time but because of stale image does not see first modification 
    7			Rollback ? Fails ? Transaction Log shows two different log records with the same PREV LSN for the page
    
SQL Server 'sortiert' Operatoren nach der Durchführung von E/A-Aktivitäten, in erster Linie zur und von der tempdb-Datenbank. Diese E/A-Operationen ähneln den E/A-Operationen des Puffers, sie wurden jedoch bereits für die Verwendung von Logik zur Wiederholung des Lesevorgangs eingerichtet, um ähnliche Probleme beheben zu können. Die in diesem Artikel beschriebene zusätzliche Diagnose gilt nicht für diese E/A-Operationen.

Microsoft hat festgestellt, dass die Hauptursache der folgenden Fehler beim Sortierlesen im Allgemeinen das Lesen veralteter Daten oder Schreibverlust ist:
2003-04-01 20:13:31.38 spid122 SQL Server-Assertion: Datei: <p:\sql\ntdbms\storeng\drs\include\record.inl>, Zeile=1447 Fehler bei Assertion = 'm_SizeRec > 0 && m_SizeRec <= MAXDATAROW'.

2003-03-29 09:51:41.12 spid57 Fehler beim Sortierlesen falsche Seiten-ID). pageid = (0x1:0x13e9), dbid = 2, Datei = e:\Programme\Microsoft SQL Server\mssql\data\tempdb.mdf. Wiederholen.

2003-03-29 09:51:41.13 spid57 Fehler: 823, Schweregrad: 24, Status: 7
2003-03-29 09:51:41.13 spid57 E/A-Fehler (falsche Seiten-ID) während Lesevorgang bei Offset 0x000000027d2000 in Datei 'e:\Programme\Microsoft SQL Server\mssql\data\tempdb.mdf' festgestellt..

* 00931097 Modul(sqlservr+00531097) (utassert_fail+000002E3)
* 005B1DA8 Modul(sqlservr+001B1DA8) (RecBase::Resize+00000091)
* 00407EE7 Modul(sqlservr+00007EE7) (RecBase::LocateColumn+00000012)
* 00852520 Modul(sqlservr+00452520) (mergerow+000000A4)
* 008522B3 Modul(sqlservr+004522B3) (merge_getnext+00000285)
* 0085207D Modul(sqlservr+0045207D) (mergenext+0000000D)
* 004FC5FB Module(sqlservr+000FC5FB) (getsorted+00000021)

Die Kunden, bei denen diese Fehler beim Sortieren auftraten, konnte das Problem häufig lösen, indem sie tempdb auf ein lokales Laufwerk ohne Cache verschoben haben, oder indem sie den Lesecachemechanismus deaktiviert haben.

Da das Lesen veralteter Daten oder ein Schreibverlust zur unerwarteter Speicherung von Daten führt, gibt es eine große Bandbreite an eventuell auftretenden Verhalten. Möglicherweise kommt es dazu, dass Daten fehlen, aber einige der häufiger auftretenden Auswirkungen von fehlenden Daten sind Beschädigungen des Index, wie beispielsweise Fehler 644 oder Fehler 625:
Fehler 644 Schweregrad 21 Meldungstext Der Indexeintrag für die RID '%.*hs' konnte in der Indexseite %S_PGID, Index-ID %d, '%.*ls'-Datenbank, nicht gefunden werden.
Fehler 625 Schweregrad 21 Meldungstext Die Zeile kann aus Seite %S_PGID nicht über die RID abgerufen werden, da die Slot-ID (%d) ungültig ist.
Bei einige Kunden kam es zum Verlust von Zeilen, nachdem sie die Funktion zum Zählen der Zeilen durchgeführt haben. Dieses Problem tritt aufgrund eines Schreibverlusts auf. Vielleicht sollte die Seite mit der geclusterten Indexseitenkette verknüpft werden. Wenn das Schreiben physisch verloren gegangen ist, gehen auch die Daten verloren.

Wichtig Wenn bei Ihnen eine der Verhaltensweisen auftritt oder wenn Sie ähnliche Probleme in Zusammenhang mit der Deaktivierung des Cachemechanismus befürchten, empfiehlt Microsoft dringend, dass Sie das neueste Update für SQL Server sowie den aktuellsten SQL Server E/A-Stress Simulator beziehen. Microsoft rät auch dringend, das Betriebssystem und die zugeordneten Konfigurationen genau zu überprüfen.

Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
231619 Wie Verwenden des SQLIOStress-Programms zu dem Belasten eines Datenträger-Subsystems wie SQL Server

Eigenschaften

Artikel-ID: 826433 - Geändert am: Freitag, 7. April 2006 - Version: 6.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Service Pack 3
Keywords: 
kbqfe kbhotfixserver kbbug kbhardware kbfilter kbdriver kbdatabase kbsysadmin kbinfo KB826433
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com