Uzasadnij NIE używanie podpowiedzi (nolock) w każdym zapytaniu

23

Czy kiedykolwiek musiałeś uzasadnić NIE używanie podpowiedzi do zapytania?

Widzę WITH (NOLOCK)w każdym zapytaniu, które trafia na bardzo zajęty serwer. Do tego stopnia, że ​​programiści uważają, że powinna ona być domyślnie włączona, ponieważ nie znoszą jej w kodzie tysiące razy.

Próbowałem wyjaśnić, że pozwala to na brudne odczyty i w końcu będą miały złe dane, ale uważają, że kompromis wydajności jest tego wart. (Ich baza danych to bałagan; nic dziwnego, że mają problemy z wydajnością.)

Jeśli masz wyraźny przykład, jak przedstawić sprawę przeciwko nadużywaniu NOLOCKpodpowiedzi, byłoby to mile widziane.

datagod
źródło

Odpowiedzi:

17

Wybierasz swoje bitwy i takich bitew nie da się łatwo wygrać. Mamy system, w którym każdy DML jest podpowiedziany podpowiedź ROWLOCK (niezależnie od modyfikacji jednego wiersza lub kilku tysięcy wierszy). Pokazałem kilka przykładów, dlaczego tak naprawdę obniża wydajność, ale ponieważ system już działa, istnieje opór przed zmianami. Zauważ, że przekonałem ich na tyle, aby NIE używać tego w przyszłości.

NOLOCK ma to miejsce, ale mogę polecić kilka dobrych referencji pokazujących problemy z używaniem:

Sankar Reddy
źródło
9

Musisz wyjaśnić swoim kolegom, jak ważne jest zrozumienie poziomów izolacji. Pokaż im przykłady. Najładniejsze i najłatwiejsze wytłumaczenie, jakie znalazłem na plakacie poziomów izolacji małej Kendry . Zapytaj ich, dlaczego uważają, że potrzebują podpowiedzi nolock. Dlaczego nie używają instrukcji „ustaw poziom izolacji transakcji ...”? Zapytaj, jaka dokładnie jest sytuacja, którą chcą naprawić, może mają zakleszczenia, blokują ... itd. Jeśli po prostu nie chcą trzymać blokad, mogą rozważyć poziom izolacji migawki.

Tylko pytając ich, możesz uzyskać wyraźny obraz.

Marian
źródło