Simptomi
Razmotrite sledeći scenario:
-
Imate bazu podataka koja ima opcije za ALLOW_SNAPSHOT_ISOLATION i READ_COMMITTED_SNAPSHOT u sistemu Microsoft SQL Server 2008 R2.
-
U tabeli u bazi podataka pokrenete izvod SELECT koji sadrži tabulatorske i UPDLOCK savete.
-
Izjava SELECT je upakovana u eksplicitni BEGIN TRAN, ali COMMIT TRAN nije izvršen.
-
Još dva ista upita koja su započeta istim nagoveštajima upita su u eksplicitnoj transakciji.
U ovom scenariju, kada se izvrši prvi upit, jedan od ostalih upita će biti ćorsokak.
Uzrok
Do problema dolazi zato što SQL Server netačno prijavljuje zastoj u jednom od sledećih scenarija:
-
Kada ALLOW_SNAPSHOT_ISOLATION iREAD_COMMITTED_SNAPSHOT omogućeni za bazu podataka, više upita u odnosu na istu transakciju može biti netačno prijavljeno kao zastoj kada se jedan od njih dovrši.
-
Kada ALLOW_SNAPSHOT_ISOTION omogućene i koriste se nagoveštaji TABLOCK i UPDLOCK, druga i treća SELECT izjava uzimaju IX brave sa namerom da se konvertuju u X. IX brave završavaju na mrtvoj tački kada se napravi pokušaj konverzije u X.
-
Kada ALLOW_SNAPSHOT_ISOLATION onemogućena, drugi i treći upit će dobiti ŠEST bravu. U ovoj situaciji, kada se SIX brava konvertuje u X, to je samo scenario blokiranja, a ne zastoj.
Rešenje
Problem je prvi put otklonjen u sledećoj kumulativnoj ispravki sistema SQL Server. Kada primenite hitnu ispravku, SQL Server će rešiti problem tako što ćete snimiti ako se za bazu podataka i upit naiđe na podsetnik "PROČITAJ COMMIT" ili "NOLOCK". Ove informacije se koriste za izbor ispravnog tipa brava za ispravno rukovanje situacijom, umesto da se nepravilno prijavi zastoj.
Kumulativna ispravka 11 za SQL Server 2008 R2 SP2 /en-us/help/2926028
Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodnu kumulativnu ispravku. Pogledajte najnovije kumulativne ispravke za SQL Server:
Status
Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".