SQL Server-diagnostik läggs till identifiera Orapporterade i/o-problem på grund av inaktuella läsningar eller förlorade skrivningar

PROGRAMFEL #: 470086 (SQLServer 8.0)

Symptom

Om operativsystemet, drivrutiner och maskinvara problem orsak förlorat skriver eller inaktuella Läs tillstånd, kan du se data integritet-relaterade felmeddelanden som fel 605 823, 3448, 3456. Du kan få felmeddelanden som liknar följande exempel:


2003-07-24 16:43:04.57 spid63 Getpage: bstat = 0x9 sstat = 0x800 cache
2003-07-24 16:43:04.57 spid63 pageno är/bör vara: objid är/bör vara:
2003-07-24 16:43:04.57 spid63 (1:7040966)/(1:7040966) 2093354622/2039782424

2003-07-24 16:43:04.57 spid63... IAM visar sidan tilldelas till det här objektet

2003-07-24 16:52:37.67 spid63 fel: 605, allvarlighetsgrad: 21 status: 1
2003-07-24 16:52:37.67 spid63 försöker hämta sidan (1:7040966) i databasen "pubs" som hör till objektet 'författare' inte att objekt rubriker...


2003-07-24 16:52:40.99 spid63 fel: 3448, allvarlighetsgrad: 21 status: 1
2003-07-24 16:52:40.99 spid63 det gick inte att ångra loggposten (63361:16876:181) för transaktions-ID (0:159696956) på sidan (1:7040977), databasen "pubs" (databas-ID 12). Sidan information: LSN = (63192:958360:10), typ = 2. Logga information: OpCode = 2 sammanhang 1...


2003-07-09 14:31:35.92 spid66 fel: 823, allvarlighetsgrad: 24 tillstånd: 2
2003-07-09 14:31:35.92 spid66 fel (felaktig sid-ID) upptäcktes under Läs vid förskjutning av 0x00000016774000 i filen 'h:\sql\MSSQL\data\tempdb.mdf'...

2010-02-06 15:57:24.14 spid17s fel: 3456, allvarlighetsgrad: 21 status: 1.
2010-02-06 15:57:24.14 spid17s gick inte att göra om loggposten (58997:5252:28) för transaktions-ID (0:109000187) på sidan (1:480946), databasen 'Mindatabas' (databas-ID 17). Sida: LSN = (58997:5234:17), typ = 3. LOG: OpCode = 2 sammanhang 5, PrevPageLSN: (58997:5243:17). Återställa från en säkerhetskopia av databasen eller reparera databasen.

Mer Information

Microsoft introducerade spårning av utökade funktioner som börjar med SQL Server 2000 Service Pack 4 och dessa diagnostik har varit en del av produkten i SQL Server 2005 och senare versioner. Dessa funktioner är utformade för att identifiera I/O relaterade externa problem och felsökning vid felmeddelanden som beskrivs i avsnittet "Symptom"

Om du får något av felmeddelandena som nämns i avsnittet "Symptom" och inte kan förklaras av en händelse som en fysisk hårddiskfel, granskar du några kända problem med SQL Server, operativsystemet, drivrutiner och maskinvara. Diagnostiken försöker innehåller information om följande två villkor:

  • Förlorade skriva: En lyckad anrop till WriteFile -API, men operativsystemet, en drivrutin eller cache-styrenheten korrekt töms inte data till det fysiska mediet även om SQL Server har informerats om att skrivningen lyckades.

  • Inaktuella Läs: En lyckad anrop till ReadFile -API, men operativsystemet, en drivrutin eller cache-styrenheten felaktigt returnerar en äldre version av data.

Microsoft har till exempel bekräftat scenarier där ett WriteFile API-anrop returnerar som lyckas, men en omedelbar, lyckad läsning av samma datablock returnerar äldre data, inklusive data som kan lagras i en maskinvara som läsning av cache. Det här problemet uppstår ibland på ett skrivskyddat cache-problem. I andra fall skrivs egentligen aldrig skriva data till den fysiska disken.

Om du vill aktivera ytterligare diagnostik för dessa typer av problem, har SQL-servern lagts spårningsflagga 818. Du kan ange spårningsflagga 818 som en startparameter-T818, för den dator som kör SQL Server, eller om du kan köra följande uttryck:

DBCC TRACEON(818, -1)


Spårningsflagga 818 gör en i minnet ringbufferten som används för att spåra de sista 2 048 lyckas skrivåtgärder som utförs av datorn som kör SQL Server, inklusive inte sortera och till arbetsfilen I/Os. När det uppstår fel som fel 605, 823 eller 3448, jämförs inkommande bufferten loggen sekvens nummer (LSN) värde med listan Senaste skrivning. Om LSN som hämtas under en läsning är äldre än den som angetts under åtgärden loggas ett nytt felmeddelande i felloggen för SQL Server. De flesta SQL Server skrivåtgärder inträffar som kontrollpunkter eller lazy skrivningar. En lazywrite är en bakgrundsaktivitet som använder asynkron I/O. Implementering av ringbufferten är lätta, vilket gör prestanda påverkas i systemet försumbar.

Följande meddelande visar att SQL Server inte får ett felmeddelande från WriteFile API-anrop eller ReadFile API-anrop. Värdet var dock inte korrekt när LSN har granskat:


SQL-servern har upptäckt ett Orapporterade OS/maskinvarunivå läsa eller skriva problemet på sidan (1:75007) i databasen 12

LSN returnerade (63361:16876:181), LSN förväntas (63361:16876:500)

Kontakta maskinvarans leverantör och du kan inaktivera cachelagring mekanismer för att åtgärda problemet


Börjar med SQL Server 2005, rapporteras felmeddelandet som:


SQL Server upptäckte en logisk konsekvens-baserade i/o-fel: Läs inaktuella. Det uppstod under en << full >> sidan << PAGEID >> i databas-ID << DBID >> vid förskjutningen << fysisk förskjutning >> i filen << filnamn >>. Ytterligare felmeddelanden i SQL Server fel logg- eller händelseloggen kan ge mer detaljerad information. Detta är ett allvarligt fel som hotar databasintegritet och måste åtgärdas omedelbart. Utför en konsekvenskontroll för hela databasen (DBCC CHECKDB). Det här felet kan orsakas av många faktorer. Mer information finns i SQL Server Books Online.


Nu antingen läsa cachen innehåller en äldre version av sidan eller data skrevs inte korrekt till den fysiska disken. I båda fallen (en förlorad skriva eller inaktuella Läs) rapporterar SQL Server en extern problem med operativsystemet, drivrutinen eller maskinvara lager.

Om 3448 fel inträffar när du försöker ångra en transaktion som har fel 605 eller fel 823 datorn som kör SQL Server automatiskt stänger databasen och försöker öppna och återställa databasen. Den första sida som uppstår fel 605 eller fel 823 anses en skadad sida och sidan id bevaras genom datorn som kör SQL Server. Under återställningen (före fasen gör om) när den skadade SID-id läses primär information om sidhuvudet loggas i felloggen för SQL Server. Detta är viktigt eftersom det hjälper till att skilja mellan scenarier förlorade skriva och läsa inaktuella.

Du kan se i följande två vanliga beteenden inaktuella Läs scenarier:
Beteenden som nämns i föregående punkt anger read caching problemet och löses ofta genom att inaktivera skrivskyddat cache. De åtgärder som beskrivs i föregående stycke vanligtvis tvinga en cache ogiltigförklaring och lyckas läsningar som inträffar visa att det fysiska mediet är korrekt uppdaterade. Skriva försvinner problemet uppstår när sidan läses tillbaka är fortfarande den äldre versionen av data, även efter en påtvingad tömning av mekanismerna för cachelagring.

Ibland kan kanske problemet inte specifikt för en maskin-cache. Det kan vara problem med en filterdrivrutin. I sådana fall granska din programvara, inklusive verktyg för säkerhetskopiering och antivirusprogram, och sedan kontrollera om det finns problem med drivrutinen för filter.

Microsoft har även noteras att villkor som inte uppfyller kriterierna för 605 fel eller fel 823 men orsakas av samma aktivitet inaktuella läsa eller skriva försvinner. I vissa fall visas en sida uppdateras två gånger, men med samma LSN värde. Detta kan inträffa om Objekt-ID och Sid-ID är korrekt (sida redan har tilldelats till objektet) och en ändring görs på sidan och skrivits till disken. Nästa sida-hämtning returnerar en äldre bild och sedan en andra ändring görs. Transaktionsloggen i SQL Server visar att sidan har uppdaterats två gånger med samma värde för LSN. Den här åtgärden blir ett problem när du försöker återställa en transaktion logg sekvens eller med data konsekvent problem, till exempel främmande nyckel fel eller saknas poster. Följande felmeddelande visas ett exempel på detta:


Fel: 3456, allvarlighetsgrad: 21 status: 1 kunde inte göra om loggposten (276666:1664:19) för transaktions-ID (0:825853240) på sidan (1:1787100), databas "Författare" (7). Sida: LSN = (276658:4501:9), typ = 1. LOG: OpCode = 4 sammanhang 2, PrevPageLSN: (275565:3959:31)...


Vissa scenarier beskrivs mer detaljerat i följande listor:

  • 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

SQL Server sortera operatorer för att utföra i/o-aktiviteter, främst till och från databasen tempdb . Dessa i/o-operationer som liknar buffert i/o-operationer; men är de redan utformade för att använda Läs försök logik att lösa liknande problem. Ytterligare diagnostik som beskrivs i denna artikel gäller inte för dessa i/o-åtgärder.

Microsoft har konstaterat att läsa grundorsaken till följande sortera fel är i allmänhet en inaktuell läsning eller en förlorad skriva:


2003-04-01 20:13:31.38 spid122 SQL Server påstående: fil: < p:\sql\ntdbms\storeng\drs\include\record.inl > rad = 1447 misslyckades Assertion = ' m_SizeRec > 0 & & m_SizeRec < = MAXDATAROW'.

2003-03-29 09:51:41.12 spid57 sortera läsfel (skadad sida-ID). PageID = (0x1:0x13e9), dbid = 2, file = e:\program files\Microsoft SQL Server\mssql\data\tempdb.mdf. Försöker igen.

2003-03-29 09:51:41.13 spid57 fel: 823, allvarlighetsgrad: 24 tillstånd: 7
2003-03-29 09:51:41.13 spid57 i/o-fel (felaktig sid-ID) upptäcktes under Läs vid förskjutning av 0x000000027d2000 i filen 'c:\Program\Microsoft SQL-Server\mssql\data\tempdb.mdf i e:\program'...

* 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)

Kunder som har haft felen sortera har ofta löst problemen genom att flytta tempdb -cachelagring lokala enhet eller genom att inaktivera read caching mekanismer.

Eftersom en inaktuella Läs- eller skrivåtgärder förlorade resulterar i lagring av data som inte förväntas, kan det uppstå en mängd olika beteenden. Det kan vara data som saknas, men några av de vanligaste effekterna av saknade data visas som index skadas, till exempel fel 644 eller fel 625:


Fel 644 allvarlighetsgrad nivå 21 meddelande Text kunde inte hitta indexposten för RID ' %. * hs' i index sida % S_PGID, index-ID %d, databasen ' %. * ls'.

625 allvarlighetsgrad nivå 21 felmeddelandetext kan inte hämta raden från sidan % S_PGID av RID eftersom FackID (%d) inte är giltig.


Vissa kunder har rapporterat saknas rader när de utför rad antal aktiviteter. Det här problemet uppstår på grund av förlorade skrivåtgärder. Kanske var sidan ska länkas till sidan kedjan grupperat index. Om skrivningen var fysiskt förlorade är data också förlorade.

Viktigt Om det uppstår något problem, eller om du är osäker på liknande problem med att inaktivera cachelagring mekanismer, rekommenderar Microsoft starkt att hämtar du den senaste uppdateringen för SQL Server och senaste SQL Server i/o-belastning simulatorn. Microsoft uppmuntrar även starkt att du genomför en strikt kontroll av operativsystemet och dess associerade konfigurationer.

Obs! Microsoft har bekräftat att vissa maskinvaruplattformar under sällsynta och tunga i/o-belastning kan returnera en inaktuell läsning. Om det utökade ändå möjligt föråldrade Läs/förlorat skriver villkor, kontakta maskinvaruleverantören för omedelbar följer upp och testa med verktyget SQLIOSim .

SQL Server kräver system för garanterad leverans till stabila media enligt Programmet krav för SQL Server i/o-tillförlitlighet. För mer information om kraven på indata- och utdatafilter för SQL Server-databasmotorn finns i Microsoft SQL Server Database Engine Input/Output krav.

Här är några ytterligare information om problemet:

  • Jag använde ReadFile och WriteFile som exempel API. Detta gäller även för punktdiagram och samla in aktiviteten.

  • Vi har sett flera av dessa problem på sistone (juli 2003) på Compaq/HP-baserat system baserade smarta SCSI och HP SANsin tillägg till Intel Raid-styrenheter.

  • Vi har sett det här problemet i SQL Server 2000 Service Pack 3 (760) och senare versioner, men har sett liknande scenarier innan SQL Server 2000 SP3.

  • SQLIOStress har uppdaterats för att vara mer aggressiv vid söker efter dessa villkor.

  • Andra verktyg som hjälp vid identifiering av problemen uppdaterar SQL Server utvecklingspersonal.

Skapad av:
Författare: haribaskar.janarthanam@wipro.com
Teknisk granskare: bobward; mikezw; ericchr Srikant.Jahangirdar@wipro.com (KSM-Id: Partners\v-9srikantj)
Redigering: v-sedmun; vernettp

Behöver du mer hjälp?

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Microsoft Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×