Nie zawsze jest źle.
Oczywiście pozwala to na odczytanie niezaangażowanych wartości (które mogą zostać wycofane, a zatem nigdy nie istniały logicznie), a także pozwala na takie zjawiska, jak wielokrotne odczytywanie wartości lub wcale.
Jedynymi poziomami izolacji, które gwarantują, że nie napotkasz takich anomalii, jest możliwość serializacji / migawki. W przypadku powtarzalnych wartości odczytu można pominąć, jeśli wiersz zostanie przeniesiony (z powodu aktualizacji klucza), zanim skan osiągnie ten wiersz, w przypadku odczytu zatwierdzonych wartości można odczytać dwukrotnie, jeśli aktualizacja klucza spowoduje przejście do poprzednio odczytanego wiersza.
Prawdopodobieństwo wystąpienia tych problemów jest mniejsze nolock
, ponieważ domyślnie na tym poziomie izolacji użyje skanowania z przydzielonym przydziałem, gdy szacuje, że można odczytać więcej niż 64 strony . Oprócz kategorii problemów, które pojawiają się, gdy wiersze przemieszczają się między stronami z powodu aktualizacji klucza indeksu, te uporządkowane skany alokacji są również podatne na problemy z podziałami stron (gdzie wiersze można pominąć, jeśli nowo przydzielona strona znajduje się wcześniej w pliku niż punkt już zeskanowane lub przeczytane dwukrotnie, jeśli już zeskanowana strona jest podzielona na późniejszą stronę w pliku).
Przynajmniej w przypadku prostych zapytań (pojedynczej tabeli) można zniechęcić do korzystania z tych skanów i uzyskać skanowanie z poleceniem klucza nolock
po prostu poprzez dodanie ORDER BY index_key
zapytania do zapytania, tak aby Ordered
właściwość IndexScan
była true
.
Ale jeśli twoja aplikacja do raportowania nie potrzebuje absolutnie dokładnych liczb i może tolerować większe prawdopodobieństwo takich niespójności, może być do przyjęcia.
Ale z pewnością nie powinieneś odrzucać wszystkich zapytań w nadziei, że będzie to magiczny przycisk „turbo”. Oprócz większego prawdopodobieństwa napotkania nieprawidłowych wyników na tym poziomie izolacji lub braku wyników (błąd „Nie można kontynuować skanowania za pomocą NOLOCK z powodu przenoszenia danych”) istnieją nawet przypadki, w których wydajność nolock
może być znacznie gorsza .