Simptomi
Iedomājieties šādu scenāriju:
-
Jums ir datu bāze, kurā ir opcijas ALLOW_SNAPSHOT_ISOLATION un READ_COMMITTED_SNAPSHOT iespējots Microsoft SQL Server 2008 R2.
-
Tiek palaists priekšraksts Select , kurā ir TABLOCK un UPDLOCK ieteikumi datu bāzes tabulai.
-
Priekšraksts Select ir aplauzts tiešajā uzsāktajā Tran, taču veiktā Tran nav izpildīta.
-
Divi citi vaicājumi, kas sākti ar vienu un to pašu vaicājuma padomu, ir tiešā darbībā.
Šajā scenārijā, kad pirmais vaicājums ir izdarīts, viens no pārējiem vaicājumiem būs strupceļā.
Cēlonis
Problēma rodas tāpēc, ka SQL Server nepareizi ziņo par strupceļu kādā no šiem scenārijiem:
-
Ja datu bāzei ir iespējoti ALLOW_SNAPSHOT_ISOLATION un READ_COMMITTED_SNAPSHOT , vairāki vaicājumi attiecībā uz vienu un to pašu transakciju var tikt ziņoti par nepareizi izrakstītiem, kad viens no tiem ir pabeigts.
-
Kad ir iespējots ALLOW_SNAPSHOT_ISOTION un tiek izmantoti ieteikumi TABLOCK un UPDLOCK , otrajā un trešajā priekšrakstā Select izmantojiet IX slēdzenes ar nodomu konvertēt uz X. IX bloķēšana beidzas, kad tiek veikts mēģinājums konvertēt uz X.
-
Kad ALLOW_SNAPSHOT_ISOLATION ir atspējota, otrais un trešais VAICĀJUMS iegūs seši slēdzeni. Šajā situācijā, kad seši bloķēšana tiek konvertēta par X, tas ir tikai bloķēšanas scenārijs, nevis strupceļš.
Risinājums
Šī problēma pirmo reizi tika izlabota tālāk sniegtajā SQL Server kumulatīvajā atjauninājumā. Pēc tam, kad būsit iestatījis labojumfailu, SQL Server atrisinās problēmu, ierakstoties, ja datu bāzei un vaicājumam tiek atrasta lasīšanas vai NOLOCK norāde. Šī informācija tiek izmantota, lai atlasītu pareizo bloķēšanas veidu, lai pareizi apstrādātu situāciju, nevis nepareizas atskaites vietā.
Kumulatīvais atjauninājums 11 SQL Server 2008 R2 SP2 /en-us/help/2926028
Katrā jaunajā kumulatīvajā SQL Server atjauninājumā ir iekļauti visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos kumulatīvos atjauninājumus SQL Server:
Statusa
Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".