Diagnostische gegevens van SQL Server toegevoegd aan de niet-aangegeven i/o-problemen als gevolg van verouderde lees- of schrijfbewerkingen op verloren detecteren

BUG #: 470086 (SQL Server 8.0)

Symptomen

Als het besturingssysteem, stuurprogramma of hardware problemen veroorzaakt verloren voorwaarden of verouderde voorwaarden voor lezen schrijven, ziet u mogelijk gegevens integriteit-gerelateerde foutmeldingen zoals fouten 605, 823, 3448, 3456. Er kan foutberichten die vergelijkbaar met de volgende voorbeelden zijn:


2003-07-24 16:43:04.57 spid63 Getpage: bstat = 0x9, sstat = 0x800, cache
2003-07-24 16:43:04.57 spid63 pageno is/moet zijn: objid is/moet worden:
2003-07-24 16:43:04.57 spid63 (1:7040966)/(1:7040966) 2093354622/2039782424

2003-07-24 16:43:04.57 spid63... IAM geeft aan dat die pagina toegewezen aan dit object

2003-07-24 16:52:37.67 spid63 fout: 605, ernst: 21, staat: 1
2003-07-24 16:52:37.67 spid63 probeert op te halen de logische pagina (1:7040966) in de database 'pubs' object 'auteurs' niet aan het object 'titels' hoort...


2003-07-24 16:52:40.99 spid63 fout: 3448, ernst: 21, staat: 1
2003-07-24 16:52:40.99 spid63 kan niet ongedaan maken logboekrecord (63361:16876:181), voor transactie-ID (0:159696956), op pagina (1:7040977), database 'pubs' (database-ID 12). Informatie: LSN = (63192:958360:10), type = 2. Gegevens vastleggen: OpCode = 2, kader 1...


2003-07-09-14:31:35.92 spid66 fout: 823, ernst: 24, staat: 2
2003-07-09-14:31:35.92 spid66 i/o-fout (beschadigde pagina-ID) gedetecteerd tijdens het lezen op offset 0x00000016774000 in het bestand 'h:\sql\MSSQL\data\tempdb.mdf'...

2010-02-06-15:57:24.14 spid17s fout: 3456, ernst: 21, staat: 1.
2010-02-06-15:57:24.14-spid17s kan niet opnieuw uitvoeren logboekrecord (58997:5252:28), voor transactie-ID (0:109000187), op pagina (1:480946), database 'MijnDatabase' (database-ID 17). Pagina: LSN = (58997:5234:17), type = 3. Log: OpCode = 2, 5, context PrevPageLSN: (58997:5243:17). Terugzetten vanaf een back-up van de database of de database repareren.

Meer informatie

Microsoft geïntroduceerd mogelijkheden voor uitgebreide tracering starten met SQL Server 2000 Service Pack 4 en diagnosticeren is onderdeel van het product in SQL Server 2005 en hoger. Deze mogelijkheden zijn ontworpen voor het vaststellen van I/O gerelateerde externe problemen en het oplossen van problemen met de foutberichten die worden beschreven in de sectie 'Symptomen'

Als een van de foutberichten die worden vermeld in de sectie 'Symptomen' en ze kunnen niet worden verklaard door een gebeurtenis zoals een storing van de fysieke schijf, bekijk bekende problemen met SQL Server, het besturingssysteem, stuurprogramma's en de hardware. De diagnostische gegevens probeert informatie te verstrekken over de volgende twee voorwaarden:

  • Verloren schrijven: Een geslaagde aanroep naar de WriteFile -API, maar het besturingssysteem, stuurprogramma of de cache controller is niet juist de gegevens leegmaken met het fysieke medium Hoewel SQL Server in kennis wordt gesteld dat het schrijven voltooid is.

  • Verlopen lezen: Een geslaagde aanroep naar de ReadFile -API, maar het besturingssysteem, stuurprogramma of de cache controller retourneert ten onrechte een oudere versie van de gegevens.

Microsoft heeft bijvoorbeeld scenario's waarbij een WriteFile API-aanroep retourneert als geslaagd, maar een onmiddellijke, geslaagde lezen van hetzelfde gegevensblok retourneert oudere gegevens, met inbegrip van gegevens die waarschijnlijk in een cache gelezen hardware opgeslagen zijn bevestigd. Dit probleem doet zich soms vanwege een probleem met de formulierencache lezen. In andere gevallen wordt de gegevens schrijven nooit echt geschreven naar de fysieke schijf.

SQL Server is traceringsvlag 818 toegevoegd zodat meer diagnostische gegevens voor dit soort problemen. U kunt traceringsvlag 818 opgeven als een opstartparameter-T818, voor de computer waarop SQL Server of u kunt uitvoeren met de volgende instructie:

DBCC TRACEON(818, -1)


Traceringsvlag 818 kan een in het geheugen ringbuffer die wordt gebruikt voor het bijhouden van die de laatste geslaagde 2048 bewerkingen die worden uitgevoerd door de computer met SQL Server, waaronder niet sorteren en werkbestand o niet schrijven. Zoals fout 605, 823 of 3448 fouten, wordt de ontvangstbuffer logboek reekswaarde nummer (LSN) vergeleken met de lijst met recente schrijven. Als de LSN die is opgehaald tijdens de leesbewerking ouder dan het opgegeven tijdens het schrijven is, wordt een nieuwe foutbericht vastgelegd in het foutenlogboek van SQL Server. De meeste bewerkingen van SQL Server schrijven optreden als controlepunten of lazy schrijft. Een fikse schrijven is een achtergrondtaak voor asynchrone I/O. De uitvoering van de ringbuffer is licht, waardoor de prestaties beïnvloeden van het systeem te verwaarlozen.

Het volgende bericht geeft aan dat SQL Server een fout niet heeft ontvangen van de WriteFile -API-aanroep of de ReadFile API-aanroep. Wanneer de LSN is gecontroleerd, was de waarde echter niet juist:


SQL Server heeft een niet-aangegeven OS/hardwareniveau lezen of schrijven probleem op de pagina (1:75007) van 12-database

LSN geretourneerd (63361:16876:181), LSN verwacht (63361:16876:500)

Neem contact op met de hardwareleverancier en beter uitschakelen caching mechanismen om het probleem te verhelpen


U start met SQL Server 2005, wordt het foutbericht als gerapporteerd:


SQL Server een logische samenhang gebaseerde i/o-fouten gedetecteerd: verlopen lezen. Deze is opgetreden tijdens een << lezen/schrijven >> van pagina << PAGEID >> in de database-ID << DBID >> bij << fysieke OFFSET >> offset in bestand << bestandsnaam >>. Meer berichten in de SQL-Server logboek- of gebeurtenis foutenlogboek kunnen nader bepalen. Dit is een ernstige fout die dreigt de integriteit van de database en moet onmiddellijk worden gecorrigeerd. Voer een consistentiecontrole volledige database (DBCC CHECKDB). Deze fout kan worden veroorzaakt door meerdere factoren; Zie SQL Server Books Online voor meer informatie.


Op dit moment de cache gelezen bevat een oudere versie van de pagina of de gegevens zijn niet juist geschreven naar de fysieke schijf. In beide gevallen (een schrijven verloren of verlopen Lees) rapporten SQL Server een externe probleem met het besturingssysteem, het stuurprogramma of de hardwareabstractielagen.

3448 fout optreedt wanneer u probeert een transactie met 605 fout of fout 823 te draaien, de computer met SQL Server automatisch de database wordt gesloten als probeert te openen en de database te herstellen. De eerste pagina die 605 fout of fout 823 ervaringen wordt beschouwd als een beschadigde pagina en de pagina-id wordt bewaard door de computer waarop SQL Server wordt uitgevoerd. Tijdens het herstel (vóór de fase opnieuw) als het lezen van de onjuiste pagina-id is de primaire gegevens over de paginakoptekst worden vastgelegd in het foutenlogboek van SQL Server. Deze actie is belangrijk omdat hiermee onderscheid gemaakt tussen scenario's schrijven verloren zijn gegaan en verouderde lezen.

Ziet u de volgende twee veelvoorkomende problemen in verouderde Lees scenario's:
De in de vorige alinea genoemde problemen duiden op een probleem met lezen in het cachegeheugen, en worden ze vaak opgelost door het uitschakelen van de cache gelezen. De acties die worden beschreven in de vorige alinea meestal dwingen een cache ongeldigmaking en succesvolle gelezen die optreden weergeven het fysieke medium op de juiste wijze is bijgewerkt. Verloren schrijven probleem komt voor wanneer de pagina die wordt voorgelezen nog steeds de oudere versie van de gegevens, zelfs na de gebeurtenissenwachtrij van de mechanismen in het cachegeheugen is.

Soms het probleem mogelijk niet specifiek voor een cache met hardware. Mogelijk een probleem met een stuurprogramma. In dergelijke gevallen de software, zoals back-upprogramma's en antivirussoftware, bekijken en dan zien als er problemen met het filterstuurprogramma zijn.

Microsoft heeft ook de voorwaarden die worden veroorzaakt door dezelfde activiteit verlopen lezen of schrijven verloren, maar die niet voldoen aan de criteria voor 605 fout of fout 823 geconstateerd. In sommige gevallen wordt een pagina weergegeven met de LSN dezelfde waarde, maar twee keer worden bijgewerkt. Dit probleem kan optreden als de Object-ID en de Pagina-ID van de juiste (pagina al is toegewezen aan het object) en een wijziging is aangebracht in de pagina en naar de schijf geleegd. De volgende pagina ophalen van gegevens retourneert een oudere afbeelding en vervolgens een tweede wijziging is aangebracht. Het transactielogboek van SQL Server geeft aan dat de pagina twee keer met dezelfde waarde LSN is bijgewerkt. Deze actie wordt een probleem wanneer u probeert te herstellen van een reeks transacties logboek of met consistentieproblemen, zoals vreemde sleutel fouten of ontbrekende gegevens. Het volgende foutbericht ziet u een voorbeeld van deze voorwaarde:


Fout: 3456, ernst: 21, staat: 1 kan niet opnieuw logboekrecord (276666:1664:19), voor database-transactie-ID (0:825853240), op pagina (1:1787100), "Auteurs" (7). Pagina: LSN = (276658:4501:9), type = 1. Log: OpCode = 4, kader 2, PrevPageLSN: (275565:3959:31)...


Sommige scenario's worden in meer detail in de volgende lijsten beschreven:

  • LSN SequenceAction1Checkpoint
    2Begin Transaction
    3Table created or truncated
    4Inserts (Pages allocated)
    5Newly allocated page written to disk by Lazy Writer
    6Select from table – Scans IAM chain, newly allocated page read back from disk (LRU | HASHED = 0x9 in getpage message), encounters Error 605 - Invalid Object ID
    7Rollback of transaction initiated

  • LSN SequenceAction1Checkpoint
    2Begin Transaction
    3Page Modification
    4Page written to disk by Lazy Writer
    5Page read in for another modification (stale image returned)
    6Page Modified for a second time but because of stale image does not see first modification
    7Rollback – Fails – Transaction Log shows two different log records with the same PREV LSN for the page

Exploitanten van SQL Server 'sorteren' i/o-activiteiten uitvoeren, voornamelijk van en naar de database tempdb . Deze i/o-bewerkingen zijn vergelijkbaar met de buffer i/o-bewerkingen; echter zijn zij al ontworpen om te lezen opnieuw logica gebruikt om vergelijkbare problemen op te lossen. Aanvullende diagnostische gegevens over de beschreven in dit artikel niet van toepassing op deze i/o-bewerkingen.

Microsoft heeft geconstateerd dat de oorzaak voor het sorteren van de volgende fouten in het algemeen is een verouderde lezen of een verloren schrijven lezen:


04-01-2003 20:13:31.38 spid122 SQL Server bevestiging: bestand: < p:\sql\ntdbms\storeng\drs\include\record.inl >, regel 1447 mislukt Assertion = = ' m_SizeRec > 0 & & m_SizeRec < = MAXDATAROW'.

2003-03-29 09:51:41.12 sorteren spid57 fout bij het lezen (onjuiste pagina-ID). PageID = (0x1:0x13e9), database-id = 2, bestand = e:\program files\Microsoft SQL Server\mssql\data\tempdb.mdf. Bezig met opnieuw proberen.

2003-03-29 09:51:41.13 spid57 fout: 823, ernst: 24, staat: 7
2003-03-29 09:51:41.13 spid57 i/o-fout (beschadigde pagina-ID) gedetecteerd tijdens het lezen op offset 0x000000027d2000 in het bestand e:\program files\Microsoft SQL Server\mssql\data\tempdb.mdf...

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

Klanten die deze sorteren-fouten zijn opgetreden hebben vaak de problemen opgelost door tempdb verplaatsen naar een lokaal station met-caching, of door het uitschakelen van de cache gelezen mechanismen.

Omdat verouderde lees- of schrijfbewerkingen zijn verloren in de opslag van gegevens die naar verwachting niet, kan een groot aantal problemen optreden. Het kan worden weergegeven als ontbrekende gegevens, maar sommige van de algemene gevolgen van de ontbrekende gegevens worden weergegeven als index beschadigingen, zoals 644 fout of fout 625:


Fout 644 ernst niveau 21 bericht tekst kan het indexgegeven voor RID niet vinden ' %. * hs in index pagina % S_PGID, index-ID %d, database ' %. * ls'.

Tekst van foutbericht 625 ernst niveau 21 ophalen rij niet van pagina % S_PGID door RID omdat de sleuf (%d) niet geldig is.


Sommige klanten hebben gemeld dat ontbrekende rijen na rij aantal activiteiten uitvoeren. Dit probleem wordt veroorzaakt door een verloren gaan schrijven. Misschien zou de pagina moet worden gekoppeld aan de pagina gegroepeerde index keten. Als het schrijven fysiek verloren is gegaan is, is ook de gegevens verloren.

Belangrijk Als u een van de problemen ondervindt of als u verdachte van vergelijkbare problemen en mechanismen in de cache uit te schakelen, wordt aangeraden dat meest u de recente update voor SQL Server en de nieuwste SQL Server i/o-belasting Simulator. Microsoft raadt ook met klem een strikte controle van uw besturingssysteem en de bijbehorende configuraties uit te voeren.

Opmerking Microsoft heeft bevestigd dat onder zeldzame en zware i/o-belasting, sommige hardwareplatforms Lees verlopen terugkeren kunnen. Als de uitgebreide diagnostische gegevens een mogelijk verlopen blijkt lezen/verloren voorwaarde, neem contact op met uw hardwareleverancier voor direct opvolgen van en testen met het hulpprogramma SQLIOSim .

SQL Server systemen ter ondersteuning van de gegarandeerde levering aan stabiele media als uiteengezet in de Vereisten voor SQL Server i/o-betrouwbaarheid wordtvereist. Zie voor meer informatie over de vereisten voor invoer en uitvoer voor de SQL Server-database-engine Microsoft SQL Server Database Engine invoer/uitvoer-vereisten.

Hier wordt aanvullende informatie over dit probleem:

  • Ik ReadFile en WriteFile gebruikt als voorbeelden API. Dit probleem geldt ook voor de spreiding en het verzamelen van de activiteit.

  • Wij hebben verschillende van deze problemen laatste tijd (juli 2003) op de systemen op basis van Compaq/HP Smart SCSI en HP SANsin aanvulling op Intel gebaseerd Raid-controllers.

  • We hebben gezien dit probleem meer in SQL Server 2000 Service Pack 3 (760), en later wordt gemaakt, maar scenario's voor SQL Server 2000 SP3 hebt gezien.

  • SQLIOStress is bijgewerkt en worden agressiever op op zoek naar deze voorwaarden.

  • Andere hulpprogramma's om u te helpen bij het opsporen van deze problemen is het personeel van de ontwikkeling SQL Server wordt bijgewerkt.

Auteur:
Auteur: haribaskar.janarthanam@wipro.com
Tech Reviewer: bobward; mikezw; ericchr Srikant.Jahangirdar@wipro.com (KSM-Id: Partners\v 9srikantj)
Redacteur: v-sedmun; vernettp

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Hoe tevreden bent u met de vertaalkwaliteit?

Wat heeft uw ervaring beïnvloed?

Hebt u aanvullende feedback? (Optioneel)

Bedankt voor uw feedback.

×