WITH (NOLOCK) vs SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Czy ktoś mógłby mi dać jakieś wskazówki, kiedy powinienem używać WITH (NOLOCK) w przeciwieństwie do SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Jakie są plusy / minusy każdego z nich? Czy są jakieś niezamierzone konsekwencje, które napotkałeś używając jednego w przeciwieństwie do drugiego?

Author: Ed Harper, 2010-08-23

6 answers

To to samo. Jeśli użyjesz instrukcji set transaction isolation level, będzie ona miała zastosowanie do wszystkich tabel w połączeniu, więc jeśli chcesz tylko nolock na jednej lub dwóch tabelach, użyj jej; w przeciwnym razie użyj drugiej.

Oba dadzą ci brudne odczyty. Jeśli ci to nie przeszkadza, użyj ich. Jeśli nie możesz mieć brudnych odczytów, rozważ zamiast tego podpowiedzi snapshot lub serializable.

 94
Author: HLGEM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-24 14:42:54

Z (NOLOCK) jest podpowiedzią na poziomie tabeli. Ustawienie poziomu izolacji transakcji na READ_UNCOMMITTED wpływa na połączenie. Różnica dotyczy zakresu. Zobacz READUNCOMMITTED i NOLOCK w dokumentacji SQL Server tutaj:

Http://technet.microsoft.com/en-us/library/ms187373.aspx

Dla poziomu izolacji transakcji: http://technet.microsoft.com/en-us/library/ms173763.aspx

 23
Author: Anon246,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-23 18:11:00
  • NOLOCK jest lokalny dla tabeli (lub widoków itp.)
  • odczyt jest na sesję / połączenie

Co do wytycznych... losowe Wyszukiwanie ze StackOverflow i sieci elektrycznej...

 9
Author: gbn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:40

Według mojej wiedzy jedyną różnicą jest zakres efektów, jak powiedział Strommy. NOLOCK podpowiedź na stole i odczyt na sesji.

Jeśli chodzi o problemy, które mogą się pojawić, chodzi o spójność. Jeśli cię to obchodzi, pamiętaj, że możesz uzyskać to, co nazywa się brudnymi odczytami, które mogą wpłynąć na manipulowanie innymi danymi na nieprawidłowych informacjach.

Osobiście nie sądzę, że widziałem żadnych problemów z tym, ale to może być bardziej ze względu na to, jak używam nolock. Potrzebujesz aby mieć świadomość, że istnieją scenariusze, w których będzie dobrze używać. Scenariusze, w których najczęściej dodajesz nowe dane do tabeli, ale masz inny proces, który przychodzi z tyłu, aby sprawdzić scenariusz danych. Prawdopodobnie będzie to OK, ponieważ główny przepływ nie obejmuje powrotu i aktualizacji wierszy podczas odczytu.

Uważam również, że w dzisiejszych czasach należy przyjrzeć się kontroli współbieżności wielu wersji. Wierzę, że dodali go w 2005 roku i pomaga to powstrzymać pisarzy przed blokowaniem czytelników, dając czyta migawkę bazy danych do użycia. Dołączę link i pozostaw dalsze badania czytelnikowi:

MVCC

Poziomy Izolacji Baz Danych

 8
Author: Sean Copenhaver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-23 18:20:38

Nie możesz użyć Set Transaction Isolation Level Read Uncommitted w widoku (możesz mieć tam tylko jeden skrypt), więc musisz użyć (nolock), jeśli brudne wiersze mają być włączone.

 4
Author: Rez.Net,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-19 06:02:52

Ponieważ musisz używać z (NOLOCK) dla każdej tabeli, może być irytujące zapisywanie jej w każdej klauzuli FROM lub JOIN. Ma jednak powód, dla którego nazywa się ją" brudną " lekturą. Więc naprawdę powinieneś wiedzieć, kiedy to robisz, a nie ustawiać go jako domyślny dla zakresu sesji. Dlaczego?

Zapomnienie a z (NOLOCK) może nie wpłynąć na twój program w bardzo dramatyczny sposób, jednak zrobienie brudnej lektury tam, gdzie nie chcesz , a nie, może sprawić różnicę w pewnych okolicznościach.

Więc użyj WITH (NOLOCK) jeśli wybrane dane są nieprawidłowe, ponieważ mogą zostać wycofane później. Jest to najczęściej używane, gdy chcesz zwiększyć wydajność, a wymagania dotyczące kontekstu aplikacji pozwalają na podjęcie ryzyka wyświetlania niespójnych danych. Jednak Ty lub ktoś odpowiedzialny musi rozważyć plusy i minusy decyzji o użyciu z (NOLOCK).

 3
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-23 19:26:57