SQL Server diagnostice adăugat pentru a detecta neraportate I/O probleme din cauza învechite Citeşte sau scrie pierdut

Se aplică la: Microsoft SQL Server 2005 Compact EditionMicrosoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Enterprise Edition

Simptome


Dacă sistemul de operare, drivere sau hardware cauza probleme pierdut scrie condiții sau învechite condiții de citire, este posibil să vedeți mesaje de eroare asociate integritatea datelor, cum ar fi erorile 605, 823, 3448, 3456. Este posibil să primiți mesaje de eroare asemănător cu următorul exemplu:

2003-07-24 16:43:04.57 spid63 Getpage: bstat = 0x9, sstat = 0x800, memoria cache
2003-07-24 16:43:04.57 spid63 pageno este/ar trebui să fie: objid este/ar trebui să fie:
2003-07-24 16:43:04.57 spid63 (1:7040966)/(1:7040966) 2093354622/2039782424

2003-07-24 16:43:04.57 spid63... SUNT indică faptul că este alocat pentru acest obiect

2003-07-24 16:52:37.67 eroare spid63: 605, severitate: 21, stare: 1
2003-07-24 16:52:37.67 spid63 Attempt to fetch logical page (1:7040966) în baza de date 'pubs' aparţine obiect autorii, nu la obiect 'titlurile'...

2003-07-24 16:52:40.99 eroare spid63: 3448, severitate: 21, stare: 1
2003-07-24 16:52:40.99 spid63 nu poate anula înregistrare jurnal (63361:16876:181), pentru tranzacții ID (0:159696956), pagina (1:7040977), baza de date 'pubs' (date ID 12). Pagina informații: ultimul număr de secvență = (63192:958360:10), tastați = 2. Informaţiile: OpCode = 2, context 1...

2003-07-09 14:31:35.92 eroare spid66: 823, severitate: 24, State: 2
2003-07-09 14:31:35.92 spid66 I/O error (filme ID) detectat în timpul citire la deplasarea 0x00000016774000 în fișier 'h:\sql\MSSQL\data\tempdb.mdf'...

2010-02-06 15:57:24.14 spid17s eroare: 3456, severitate: 21, stare: 1.
2010-02-06 15:57:24.14 spid17s nu ar putea reface înregistrare jurnal (58997:5252:28), pentru tranzacții ID (0:109000187), pagina (1:480946), baza de date 'MyDatabase' (date ID 17). Pagina: Ultimul număr de secvență = (58997:5234:17), tastați = 3. Jurnal: OpCode = 2, 5, context PrevPageLSN: (58997:5243:17). Restaurați dintr-o copie de rezervă a bazei de date sau repararea bazei de date.

Mai multe informații


Microsoft a introdus capacități de urmărire extinse începând cu SQL Server 2000 Service Pack 4 și aceste diagnostice au fost parte a produsului în SQL Server 2005 și versiunile ulterioare. Aceste capabilități sunt proiectate pentru a ajuta la detectarea extern probleme legate de I/O și depanarea mesajelor de eroare descrise în secţiunea "Simptome"

Dacă primiți unul din mesajele de eroare care sunt menționate în secțiunea "Simptome" și ele nu pot fi explicate de un eveniment, cum ar fi o unitate fizică de eroare, apoi examinați orice probleme cunoscute cu SQL Server, sistemul de operare, driverele și hardware-ul. Diagnosticare încercați să furnizați informații despre următoarele două condiții:
  • Pierdut scriere: Un apel cu succes la WriteFile API, dar sistemul de operare, un driver sau controlerul de memorare în cache nu corect golirea datele la suportul fizic chiar dacă SQL Server este informat că scrie s-a reușit.
  • Citire învechite: Un apel la ReadFile API, dar sistemul de operare, un driver sau controlerul de memorare în cache cu succes returnează incorect o versiune mai veche de date.
De exemplu, Microsoft a confirmat scenarii în care un apel WriteFile API returnează succes, dar o citire imediat, succes același bloc de date returnează date mai vechi, inclusiv datele care probabil este stocat într-un hardware citiți cache. Uneori, această problemă se produce din cauza unei probleme de citire cache. În alte cazuri, scriere date nu se scrie pe disc fizic.

Pentru a activa diagnostice suplimentare pentru aceste tipuri de probleme, SQL Server a adăugat semnalizatorul de urmărire 818. Aveți posibilitatea să specificați semnalizatorul de urmărire 818 ca un parametru de pornire,-T818, pentru computer care execută SQL Server, sau se poate executa următoarea declarație:
DBCC TRACEON(818, -1)

Semnalizatorul de urmărire 818 permite unui inel în memorie tampon care este utilizat pentru urmărirea 2,048 ultimul succes scrie operațiile executate de către computer care execută SQL Server, inclusiv nu sortare și workfile i. Atunci când apar erori, cum ar fi eroare 605, 823 sau 3448, buffer de intrare jurnal secvență de număr (ultimul număr de secvență) valoarea este comparat cu lista de scriere recente. Dacă este mai vechi decât cea specificată în timpul operațiunea de scriere ultimul număr de secvență care este regăsit în timpul operațiunii de citire, un nou mesaj de eroare este înregistrat în Jurnalul de erori SQL Server. Majoritatea operațiunile de scriere SQL Server să apară ca punctele de control sau scrie leneș. O scriere este o activitate de fundal care utilizează asincron I/O. Implementarea tampon sonerie este ușor, făcând performanța afectează neglijabil în sistem.

Următorul mesaj indică faptul că SQL Server nu a primit o eroare la WriteFile API apel sau apelul ReadFile API. Cu toate acestea, când a fost revizuit ultimul număr de secvență, valoarea nu a fost corectă:

SQL Server a detectat un nivel de sistem de operare/hardware neraportate citi sau scrie problema pe bază de date 12 pagina (1:75007)

Ultimul număr de secvență returnat (63361:16876:181), ultimul număr de secvență normal (63361:16876:500)

Contactați distribuitorul de hardware și aveți în vedere dezactivarea mecanismele de memorare în cache pentru a corecta problema

Începând cu SQL Server 2005, mesajul de eroare va fi raportat ca:

SQL Server a detectat o logică bazată pe consistența I/O error: învechite citire. A avut loc în timpul unei << Read/Write >> de pagină << PAGEID >> în baza de date ID << DBID >> la deplasarea << OFFSET fizic >> în fișierul << nume de fișier >>. Mesaje suplimentare în SQL Server error log sau sistem Jurnalul de evenimente poate furniza mai multe detalii. Aceasta este o eroare gravă condiția amenință integritatea bazei de date şi trebuie corectate imediat. Terminați o verificare de consistență întregii baze de date (DBCC CHECKDB). Această eroare poate fi cauzată de mai mulţi factori; pentru mai multe informații, consultați manualele Online SQL Server.

În acest moment, memoria cache citire conține o versiune mai veche a paginii, fie datele nu era scris corect la discul fizic. În ambele cazuri (o scriere pierdut sau o citire învechite), SQL Server raportează o problemă extern cu sistemul de operare, driverul sau straturi de hardware.

Dacă 3448 eroare apare atunci când încercați să rollback o tranzacție care are eroarea 605 sau eroare 823, computerul execută SQL Server automat se închide baza de date și încearcă să deschideți și recuperarea bazei de date. Prima pagină care se confruntă cu eroarea 605 sau eroare 823 este considerată o pagină defecte și id-ul paginii este păstrată de computer care execută SQL Server. În timpul de recuperare (înainte de faza de refacere) atunci când este citit id-ul rău pagina, principală detaliile despre pagina Antet sunt înregistrate în Jurnalul de erori SQL Server. Această acțiune este important, deoarece aceasta vă ajută să facă diferența între scenarii pierdut scriere și citire învechite.

Este posibil să vedeți următoarele două comportamente comune în citire învechite scenarii:
Comportamentele menționate în paragraful anterior indică o problemă de memorare în cache citire și acestea sunt rezolvate frecvent prin dezactivarea memoria cache de citire. Acțiunile care sunt menționate în paragraful anterior, de obicei, impune o memorie cache anularea și citirile succes care apar Arată că suportul fizic se actualizează corect. Comportamentul pierdut scrie apare atunci când pagina pe care se citește înapoi este încă versiunea mai veche de date, chiar şi după o culoare impuse de mecanismele de memorare în cache.

Uneori, problema poate fi o memorie cache de hardware specifice. Aceasta poate fi o problemă cu un driver de filtrare. În aceste cazuri, examinați software-ului, inclusiv utilitarele de copiere de rezervă și antivirus software, și apoi vedeți dacă există probleme cu driverul de filtrare.

Microsoft a notat, de asemenea, condiții care îndeplinesc criteriile pentru eroarea 605 sau eroare 823 dar sunt cauzate de aceeași activitate învechite citi sau scrie pe pierdut. În unele cazuri, apare o pagină să fie actualizate de două ori, dar cu ultimul număr de secvență aceeași valoare. Acest comportament poate apărea dacă Obiect ID și Pagina ID sunt corecte (pagina deja alocată obiectul) și o modificare este făcută la pagina și eliminate de pe disc. Regăsire următoarea pagină returnează o imagine mai vechi, iar apoi un al doilea se modifică. Jurnalul de tranzacții SQL Server Arată că pagina s-a actualizat de două ori cu aceeași valoare ultimul număr de secvență. Această acțiune va fi o problemă atunci când încercați să restabiliți o secvență de jurnal de tranzacții sau cu probleme consistența datelor, cum ar fi erori de cheie străină sau lipsesc date intrări. Următorul mesaj de eroare ilustrează un exemplu de această condiţie:

Eroare: 3456, severitate: 21, stare: 1 nu poate reface înregistrare jurnal (276666:1664:19), pentru tranzacții ID (0:825853240), pagina (1:1787100), baza de date 'autorii' (7). Pagina: Ultimul număr de secvență = (276658:4501:9), tastați = 1. Jurnal: OpCode = 4, 2, context PrevPageLSN: (275565:3959:31).

Unele scenarii sunt prezentate în detaliu în următoarele liste:
  • 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 'Sortare' operatorii efectua activități I/O, mai ales în și din baza de date tempdb . Aceste operațiuni I/O sunt similare cu operațiunile I/O tampon; cu toate acestea, acestea au fost deja proiectate să utilizeze citire Reîncercare logica pentru a rezolva probleme similare. Diagnostice suplimentare explicate în acest articol nu se aplică acestor operațiuni I/O.

Microsoft a observat că din cauza rădăcină pentru sortare următoarele citiți erori în general este o citire învechite sau a scrie pierdut:

2003-04-01 20:13:31.38 spid122 SQL Server aserțiune: fișier: < p:\sql\ntdbms\storeng\drs\include\record.inl > linie = 1447 Failed aserțiune = ' m_SizeRec > 0 & & m_SizeRec < = MAXDATAROW'.

2003-03-29 09:51:41.12 spid57 sortare read failure (filme ID). pageId = (0x1:0x13e9), dbid = 2, file = e:\program files\Microsoft SQL Server\mssql\data\tempdb.mdf. Reîncercare.

2003-03-29 09:51:41.13 eroare spid57: 823, severitate: 24, State: 7
2003-03-29 09:51:41.13 spid57 I/O error (filme ID) detectat în timpul citire la deplasarea 0x000000027d2000 în fișier '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)

Clienții care au avut aceste erori de sortare frecvent au rezolvat problemele prin mutarea tempdb la o unitate locală non-cache sau prin dezactivarea mecanismele de citire de memorare în cache.

Deoarece o citire învechite sau o scriere pierdut duce la stocare de date care nu este normal, se poate produce o varietate de comportamente. Acesta poate apărea ca date lipsă, dar unele dintre efectele mai comune de date lipsă apare ca index mai puțin importante, cum ar fi eroare 644 sau 625 de eroare:

Eroare 644 nivel de severitate 21 mesaj Text poate găsiți intrarea de index pentru RID ' %. * sa în index pagina % S_PGID, index %d, ID-ul de baze de date ' %. * ls'.

Eroare 625 severitate nivel 21 mesaj Text poate regăsi rând din pagina % S_PGID de RID, deoarece slotid (%d) nu este validă.

Unii clienți au raportat lipsesc rândurile după ce le efectuați rând ai activități. Această problemă se produce din cauza o scriere pierdut. Poate pagina ar fi trebuit să fie legată de lanțul de pagină index grupat. Dacă scrie s-a pierdut fizic, de asemenea, se pierde datele.

Important Dacă vă confruntaţi cu oricare dintre comportamente, sau dacă suspecte de probleme similare împreună cu dezactivarea mecanismele de memorare în cache, Microsoft recomandă insistent ca obține cea mai recentă actualizare pentru SQL Server și cele mai recente SQL Server I/O stres Simulator. Microsoft, de asemenea, încurajează când efectuați o revizuire strict a sistemului de operare și configurații sale asociate.

Notă Microsoft a confirmat că sub rare şi greu încarcă I/O, unele platforme hardware poate returna un citire învechite. Dacă diagnostice extinsă indică o posibilă stătut citire/pierdut condiție de scriere, Contactați distribuitorul de hardware pentru imediată urmaţi până și testați cu utilitarul SQLIOSim .

SQL Server necesită sisteme pentru a accepta livrare garantat stabilă media prevăzute în SQL Server I/O fiabilitatea cerințele de Program. Pentru mai multe informații despre cerințele de intrare și de ieșire pentru motorul de baze de date SQL Server, consultați Microsoft SQL Server bază de date motor de intrare/ieșire cerințe.