Symptomy
Rozpatrzmy następujący scenariusz:
-
Masz bazę danych zawierającą opcje ALLOW_SNAPSHOT_ISOLATION i READ_COMMITTED_SNAPSHOT włączone w programie Microsoft SQL Server 2008 R2.
-
Uruchamiamy instrukcję SELECT zawierającą wskazówki TABLOCK i UPDLOCK względem tabeli w bazie danych.
-
Instrukcja SELECT jest zawijana w jawnej instrukcji BEGIN, ale polecenie commit przeliczanie nie jest wykonywane.
-
Dwie więcej z tych samych zapytań, które są uruchamiane z tymi samymi wskazówkami dotyczącymi kwerend, znajdują się w transakcji jawnej.
W tym scenariuszu podczas zatwierdzania pierwszego zapytania jedna z pozostałych zapytań będzie zakleszczenia.
Przyczyna
Ten problem występuje, ponieważ program SQL Server niepoprawnie informuje o zakleszczeniu w jednym z następujących scenariuszy:
-
Gdy ALLOW_SNAPSHOT_ISOLATION i READ_COMMITTED_SNAPSHOT są włączone dla bazy danych, wiele zapytań dotyczących tej samej transakcji może zostać błędnie zgłoszona jako zakleszczenie po zakończeniu jednego z nich.
-
Gdy jest włączony ALLOW_SNAPSHOT_ISOTION i użyto wskazówek TABLOCK i UPDLOCK , druga i trzecia instrukcja SELECT przyjmuje IX blokada z zamiarem konwersji na X. Gdy zostanie podjęta próba konwersji na znak X, blokada IX zakończy zakleszczenie.
-
Gdy ALLOW_SNAPSHOT_ISOLATION jest wyłączone, druga i trzecia kwerenda uzyska sześć blokad. W takiej sytuacji po przekonwertowaniu sześciu blokad na X jest to tylko scenariusz blokowania, a nie zakleszczenie.
Rozwiązanie
Ten problem został po raz pierwszy rozwiązany w poniższej zbiorczej aktualizacji programu SQL Server. Po zastosowaniu tej poprawki program SQL Server rozpoznaje problem, rejestrując je, jeśli dla bazy danych i zapytania napotkano wskazówkę Read commit lub NOLOCK . Te informacje służą do wybrania prawidłowego typu blokowania, aby prawidłowo obsługiwać sytuację, zamiast błędnego zakleszczenia raportu.
Zbiorcza aktualizacja 11 dla programu SQL Server 2008 R2 z dodatkiem SP2 /en-us/help/2926028
Każda nowa Zbiorcza aktualizacja programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji zbiorczej. Zapoznaj się z najnowszymi aktualizacjami zbiorczymi dla programu SQL Server:
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".