Simptomai
Apsvarstykite šį scenarijų:
-
Turite duomenų bazę, kurioje yra parinkčių ALLOW_SNAPSHOT_ISOLATION ir READ_COMMITTED_SNAPSHOT įgalinta "Microsoft SQL Server" 2008 R2.
-
Vykdote sakinį Select , kuriame yra " TABLOCK " ir UPDLOCK užuominų su duomenų bazės lentele.
-
Sakinys Select yra įvyniotas į AIŠKŲ pradžios transo, bet padaryti TRAN nėra įvykdytas.
-
Dar dvi tos pačios užklausos, kurios buvo pradėtos su tais pačiais užklausos patarimais, yra aiškioje transakcijoje.
Pagal šį scenarijų, kai pirmoji užklausa yra įsipareigojusi, viena iš kitų užklausų bus aklavietė.
Priežastis
Ši problema iškyla dėl to, kad SQL serveris netinkamai praneša apie aklavietę viename iš šių scenarijų:
-
Kai " ALLOW_SNAPSHOT_ISOLATION " ir " READ_COMMITTED_SNAPSHOT " yra įgalintos duomenų bazės, kelios užklausos dėl tos pačios operacijos gali būti pranešamos kaip aklavietėje neteisingai, kai vienas iš jų yra užbaigtas.
-
Kai ALLOW_SNAPSHOT_ISOTION įgalintas ir naudojami patarimai, kaip " TABLOCK " ir " UPDLOCK ", antroje ir trečioje dalyje sakinys Select Paimkite IX Locks su ketinimu konvertuoti į X. IX užraktai baigiasi aklavietė, kai bandoma konvertuoti į X.
-
Kai ALLOW_SNAPSHOT_ISOLATION išjungta, antrosios ir trečiosios užklausos gaus šešis užraktus. Esant tokiai situacijai, kai šeši užrakinti konvertuojami į X, tai tik blokavimo scenarijus, o ne aklavietė.
Sprendimas
Problema pirmą kartą buvo išspręsta šį kaupiamąjį naujinimą SQL serverio. Kai pritaikote šias karštąsias pataisas, "SQL Server" išsprendžia problemą įrašydami, jei duomenų bazės ir užklausos aptikote skaitymo patvirtinimo užuominą arba NOLOCK užuominą. Ši informacija naudojama norint pasirinkti tinkamą spynos tipą, kad tinkamai susidorumėte su padėtimi, o ne netinkamai pranešti apie aklavietę.
Kaupiamasis naujinimas 11 SQL serverio 2008 R2 SP2 /en-us/help/2926028
Kiekvienas naujas Kaupiamasis naujinimas, skirtas "SQL Server", yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio kaupiamojo naujinimo. Peržiūrėkite naujausius kaupiamuosius SQL serverio naujinimus:
Statusą
"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema.