SQL serverio diagnostikos priskirti aptikti nepranešama įvesties/išvesties problemos, susijusios su seni rašoma arba prarasti rašo

BUG #: 470086 (SQL serverio 8.0)

Požymiai

Jei operacinė sistema, tvarkyklės ar aparatūros problemų priežastis, prarado rašyti ar seni skaityti sąlygų, gali būti rodomas duomenų vientisumo klaidos pranešimo, pvz., klaidų 605, 823, 3448, 3456. Galite gauti pranešimų, panašių į toliau pateiktų pavyzdžių:


2003-07-24 16:43:04.57 spid63 Getpage: bstat = 0x9 sstat = 0x800, talpykla
2003-07-24 16:43:04.57 spid63 pageno yra/turėtų būti: objid yra/turėtų būti:
2003-07-24 16:43:04.57 spid63 (1:7040966)/(1:7040966) 2093354622/2039782424

2003-07-24 16:43:04.57 spid63... IAM nurodo šį puslapį priskirti šį objektą

2003-07-24 16:52:37.67 spid63 klaida: 605, svarbos: 21, State: 1
2003-07-24 16:52:37.67 spid63 bandymas gauti loginį puslapį (1: 7040966) duomenų bazėje "kavinėse" priklauso objekto autorių, kad objekto "pavadinimai".


2003-07-24 16:52:40.99 spid63 klaida: 3448, svarbos: 21, State: 1
2003-07-24 16:52:40.99 spid63 Nepavyko anuliuoti operacijų ID (0: 159696956), puslapyje (1: 7040977), "kavinėse" (duomenų bazės ID 12) duomenų bazės žurnalo įrašas (63361:16876:181). Puslapio informacija: LSN = (63192:958360:10), įveskite = 2. Žurnalo informacija: kodas operacijos = 2, 1 kontekste.


2003-07-09 14:31:35.92 spid66 klaida: 823, svarbos: 24, valstybė: 2
2003-07-09 14:31:35.92 spid66 įvesties/išvesties klaida (netinkamas puslapio ID) aptikti skaitymo esant nuokrypiui 0x00000016774000 faile "h:\sql\MSSQL\data\tempdb.mdf".

2010-02-06 15:57:24.14 spid17s klaida: 3456, svarbos: 21, State: 1.
2010-02-06 15:57:24.14 spid17s ne gali perdaryti žurnalo įrašas (58997:5252:28), operacijų ID (0: 109000187), puslapyje (1: 480946), "MyDatabase" (duomenų bazės ID 17) duomenų bazės. Puslapis: LSN = (58997:5234:17), įveskite = 3. Žurnalo: Kodas operacijos = 2, 5, konteksto PrevPageLSN: (58997:5243:17). Atkurti iš duomenų bazės atsarginę kopiją arba atkurti duomenų bazę.

Daugiau informacijos

Microsoft pristatė išplėstinis stebėjimo galimybės, pradedant nuo SQL Server 2000 4 pakeitimų paketą ir toliau diagnostikos buvo produkto "SQL Server 2005" ir naujesnėse versijose. Šias galimybes yra skirti padėti nustatyti įvesties/išvesties su išorės problemas ir trikčių šalinimas, aprašytą skyriuje "Požymiai"

Jei gaunate klaidų pranešimus, nurodytus skyriuje "Požymiai", ir jie negali paaiškinti įvykį, pvz., fizinio disko triktis, tada peržiūrėkite visas žinomas problemas su SQL serverio operacinės sistemos, tvarkykles ir aparatūros. Diagnostikai bandoma pateikti informaciją apie šių dviejų sąlygų:

  • Prarastas rašyti: Sėkmingai skambučio WriteFile API, bet operacinė sistema, tvarkyklės ar kaupiantis valdiklio nėra tinkamai išvalyti duomenis fizinės laikmenos net jei SQL serverio yra pranešė, kad rašymo sėkmingai.

  • Seni skaityti: Sėkmingai skambučio ReadFile API, bet operacinė sistema, tvarkyklės ar kaupiantis valdiklio neteisingai pateikia senesnę duomenų.

Pvz., "Microsoft" patvirtino scenarijai, kai WriteFile API skambučio pateikia kaip sėkmingai, tačiau nedelsiant, sėkmingai skaityti, iš tos pačios duomenų blokų pateikia senesnės duomenimis, įskaitant duomenis, saugoma gali skaityti talpyklos aparatūros. Kartais ši problema kyla dėl skaitymo talpyklos problemos. Kitais atvejais niekada iš tikrųjų rašyti duomenis įrašomas į fiziniame diske.

Norėdami įgalinti papildomos diagnostikos tokio tipo problemas, SQL serverio pridėjo sekimo žymė 818. Kaip paleisties parametras, galite nurodyti sekimo žymė 818-T818, kompiuterio, kuriame veikia SQL Server, arba galite paleisti įrašoma:

DBCC TRACEON(818, -1)


Sekimo žymė 818 leidžia atmintyje ring buferio, naudojamas stebėjimo sėkmingai paskutinį 2 048 rašyti veiksmus kompiuterio, kuriame veikia SQL Server, rūšiuoti ir workfile įvestis/išvestis. Kai klaidos, pavyzdžiui, 605, 823 arba 3448 klaida įvyksta, gaunamo buferio žurnalo sekos numeris (LSN) reikšmė yra palyginti su neseniai rašymo sąrašas. Jei LSN nuskaito skaitymo operacijos metu yra senesnės nei nurodytas per operaciją, SQL serverio klaidos žurnale užregistruojamas naują pranešimą. Dauguma SQL serverio rašymo operacijas kilti kaip kontroliniai taškai arba kai kuriais rašo. Kai kuriais rašymo užduotis fone, naudoja asinchroninio įvesties/išvesties. Ring buferio įgyvendinimas yra lengvas, todėl įtakos nežymios sistemos našumas.

Šis pranešimas rodo, kad SQL Server negavo klaida WriteFile API paskambinti arba ReadFile API skambučių. Tačiau, kai buvo peržiūrėtas ir LSN, reikšmė buvo neteisingas:


SQL Server aptiko nepranešama OS įrangos lygis nuskaityti arba įrašyti problema puslapyje (1: 75007) duomenų bazės 12

LSN grįžo (63361:16876:181), LSN tikėtasi (63361:16876:500)

Kreipkitės į jo tiekėją ir galite blokuoti spartinimo mechanizmai problemai spręsti


Pradedant nuo SQL Server 2005, klaidos pranešimas bus pranešta kaip:


SQL Server aptiko loginio nuoseklumo pagal įvesties/išvesties klaida: seni skaityti. Tai įvyko su << skaityti/rašyti >> puslapio << PAGEID >> duomenų bazės ID << DBID >> esant nuokrypiui << fizinės poslinkis >> << failo vardas >> faile. Papildomi pranešimai SQL serverio klaidos žurnale arba sistemos įvykių žurnale gali suteikti daugiau informacijos. Tai rimta klaida, dėl kurios gresia duomenų bazės vientisumą ir nedelsiant reikia ištaisyti. Atlikite visos duomenų bazės vientisumo patikrinimą (DBCC CHECKDB). Ši klaida gali kilti dėl įvairių priežasčių; daugiau informacijos ieškokite SQL Server interneto knygų.


Šiuo metu, skaityti talpykloje yra senesnė versija puslapio arba duomenys nebuvo tinkamai įrašytas į fiziniame diske. Abiem atvejais (Lost rašyti arba seni skaityti), SQL serverio praneša apie išorinio triktį operacinė sistema, tvarkyklės ar aparatūros lygmenys.

Jei klaidos 3448 kyla bandant ankstesnės operaciją, ar klaidos 605 klaidos 823, kompiuterio, kuriame veikia SQL Server automatiškai uždaroma duomenų bazę ir bando atidaryti ir atkurti duomenų bazę. Pirmas puslapis, 605 klaidos ar klaidos 823 laikomi blogai puslapį ir puslapio id yra laikomi iš kompiuterio, kuriame veikia SQL Server. Atkuriant (prieš perdaryti etapas) kai skaityti bloga puslapio id, SQL serverio klaidos žurnale bus įrašyti Pagrindinis išsami informacija apie puslapio antraštę. Šį veiksmą svarbu, nes tai padeda atskirti prarado rašyti ir seni skaityti scenarijai.

Galite matyti šias du bendrąsias problemas seni skaityti atvejais:
Kaip minėta ankstesnėje dalyje nurodyti skaityti kaupiantis problemą ir jos dažnai išspręsti išjungdami skaityti talpykla. Veiksmai, kurie yra išdėstyti ankstesnės pastraipos paprastai priversti talpyklos negaliojančia ir sėkmingai rašoma, kurios atsiranda Rodyti, kad fizinė laikmena tinkamai atnaujintas. Kad prarado rašyti atliekama, kai puslapį, kuriame yra perskaitytą vis dar senesnę duomenų, net ir po priverstinio Flash spartinimo mechanizmai.

Kartais ši problema gali būti su aparatūros talpyklos. Gali būti problemų su filtro tvarkyklė. Tokiais atvejais, peržiūrėkite programinę įrangą, įskaitant atsarginių kopijų kūrimo priemonės ir antivirusinės programinės įrangos, ir tada patikrinkite, ar yra problemų su filtro tvarkyklė.

Microsoft taip pat nurodė sąlygas, neatitinka kriterijų 605 klaidos arba klaidos 823, bet dėl pačios seni skaityti arba prarado rašyti veiklos. Kai kuriais atvejais puslapį rodomas atnaujintas du kartus, bet su pačiu LSN reikšmę. Taip gali atsitikti, jei Objekto ID ir Puslapio ID yra teisingas (puslapis jau priskirtas objektas), o pakeisti į puslapį ir išvalyti į diską. Kito puslapio gavimo pateikia senesnės vaizdą ir tada antrą pakeista. SQL serverio operacijų žurnalo rodo, kad puslapis buvo atnaujintas du kartus su LSN reikšmė tokia pati. Šis veiksmas tampa problema, kai bandote atkurti operacijų žurnalo seka arba duomenų vientisumo problemų, pvz., užsienio pagrindiniai gedimai arba trūkstamų duomenų įrašų. Šis klaidos pranešimas rodo pavyzdys, šios sąlygos:


Klaida: 3456, svarbos: 21, State: 1 ne nepavyko perdaryti žurnalo įrašas (276666:1664:19), nes operacijos ID (0: 825853240), puslapyje (1: 1787100) duomenų bazės "autorių" (7). Puslapis: LSN = (276658:4501:9), įveskite = 1. Žurnalo: Kodas operacijos = 4, 2, konteksto PrevPageLSN: (275565:3959:31).


Kai kuriais atvejais pateikiamos toliau pateikiami išsamiau:

  • 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 "rūšiuoti" operatoriai atlikti veiksmus, visų pirma į ir iš tempdb duomenų bazės įvesties/išvesties. Šios įvesties/išvesties operacijos yra panašus į buferio įvesties/išvesties operacijos; Tačiau jie jau buvo skirtas naudoti skaityti siuntimo logika, spręsti panašias problemas. Šiame straipsnyje paaiškinta papildomos diagnostikos nėra taikomos šios įvesties/išvesties operacijos.

"Microsoft" pastebėjo, kad priežastis dėl šių rūšiuoti skaityti triktys paprastai yra pasenusi skaityti arba prarado rašyti:


2003-04-01 20:13:31.38 spid122 SQL serverio teiginį: failą: < p:\sql\ntdbms\storeng\drs\include\record.inl >, eilutės = 1447 nepavyko teiginį = ' m_SizeRec > 0 & & m_SizeRec < = MAXDATAROW'.

2003-03-29 09:51:41.12 spid57 rūšiuoti skaitymo triktis (prasta puslapio ID). pageID = (0x1:0x13e9), dbid = 2, failas = e:\program files\Microsoft SQL Server\mssql\data\tempdb.mdf. Bandydami dar kartą.

2003-03-29 09:51:41.13 spid57 klaida: 823, svarbos: 24, valstybė: 7
2003-03-29 09:51:41.13 spid57 įvesties/išvesties klaida (netinkamas puslapio ID) aptikti skaitymo esant nuokrypiui 0x000000027d2000 faile "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)

Klientai, kurie susidūrė su šios klaidos rūšiuoti dažnai išsprendėte problemas perkeliant tempdb -Kaupimas talpykloje vietiniame diske arba išjungdami skaityti kaupiantis mechanizmus.

Kadangi seni skaityti arba prarasti rašymo į duomenų saugyklą, mažai tikėtina, gali atsirasti įvairių veikimą. Tai gali atrodyti kaip trūkstami duomenys, bet kai kurie iš dažniausių efektų trūkstami duomenys rodomi kaip indekso nėra, pvz., klaidos 644 arba klaidos 625:


Klaidos 644 svarbos lygis 21 pranešimo teksto nepavyko rasti rodyklės įrašo RID "%. * SS rodyklės puslapis % S_PGID, rodyklė ID %d, duomenų bazės" %. * ls'.

Klaidos 625 svarbos lygis 21 pranešimo tekstas negali nuskaityti eilutės iš % puslapio S_PGID pagal RID, nes slotid (%d) yra neteisingas.


Kai kurie klientai apie trūksta eilutes, po to, kai jie atlikti eilučių skaičius veiksmus. Ši problema kyla dėl prarasti rašymo. Galbūt puslapio turėjo galima susieti su klasterinis indeksas puslapį tinklas. Jei rašyti fiziškai nutrūko, duomenys taip pat bus prarasti.

Svarbu. Ar galite pastebėti bet kurį problemos, arba jei esate įtartinas panašios problemos ir blokuoti spartinimo mechanizmai, "Microsoft" primygtinai rekomenduoja, kad gauti naujausią SQL Server ir naujausią SQL Server įvesties/išvesties Stress Simulator. "Microsoft" taip pat rekomenduoja atlikti griežtai peržiūrėti savo operacinės sistemos ir jos susijusių konfigūracijos.

Pastaba. "Microsoft" patvirtino, kad esant dideliam ir retais įvesties/išvesties apkrovoms, kai kurių aparatūros platformos gali grąžinti seni skaityti. Jei išplėstinis diagnostikos rodo galimą pasenusi skaityti/prarado rašyti sąlyga, susisiekite su aparatūros tiekėju, nedelsiant atlikite atsarginę kopiją ir išbandykite su SQLIOSim priemonę.

SQL serveris reikalauja sistemos, padedančios garantuojamas pristatymas į stabilią media, kaip nurodyta toliau SQL Server įvesties/išvesties patikimumo programos reikalavimai. Jei norite gauti daugiau informacijos apie SQL serverio duomenų bazės modulis įvesties ir išvesties reikalavimus, peržiūrėkite "Microsoft" SQL Server duomenų bazės modulio įvesties/išvesties reikalavimai.

Čia pateikiama papildomos informacijos apie šią problemą:

  • Aš ReadFile ir WriteFile API pavyzdžių. Šią problemą taip pat taikomas dviejų reikšmių diagrama ir skleisti veikla.

  • Matome kelis iš šių problemų pastaruoju metu (2003 m. liepos) pagal Compaq/HP pagal sistemas, "Intel" Smart SCSI ir HP SANsin be Raid valdikliai.

  • Mes matyti daugiau SQL Server 2000 3 pakeitimų paketo (760), šią problemą ir vėliau komponavimo versijos, bet matyti panašių scenarijų prieš SQL Server 2000 SP3.

  • SQLIOStress buvo atnaujintas agresyvus į ieško šios sąlygos.

  • SQL serverio kūrimo darbuotojai atnaujina kitų priemonių triktis, siekiant nustatyti problemos.

Autorius:
Rašytojas: haribaskar.janarthanam@wipro.com
Techninis redaktorius: bobward; mikezw; ericchr Srikant.Jahangirdar@wipro.com (KSM Id: Partners\v-9srikantj)
Redaktorius: v-sedmun; vernettp

Reikia daugiau pagalbos?

Tobulinkite savo įgūdžius
Ieškoti mokymo
Pirmiausia gaukite naujų funkcijų
Prisijungti prie "Microsoft Insider"

Ar ši informacija buvo naudinga?

Dėkojame už jūsų atsiliepimus!

Dėkojame už jūsų atsiliepimą! Panašu, kad gali būti naudinga jus sujungti su vienu iš mūsų „Office“ palaikymo agentų.

×