Ten poziom izolacji umożliwia brudne odczyty. Jedna transakcja może zawierać niezatwierdzone zmiany wprowadzone przez inną transakcję.
Aby utrzymać najwyższy poziom izolacji, DBMS zwykle blokuje dane, co może skutkować utratą współbieżności i wysokim obciążeniem związanym z blokowaniem. Ten poziom izolacji rozluźnia tę właściwość.
Możesz zapoznać się z artykułem Wikipedii na temat READ UNCOMMITTED
po kilka przykładów i dalszą lekturę.
Możesz również zainteresować się artykułem na blogu Jeffa Atwooda o tym, jak on i jego zespół rozwiązali problem impasu we wczesnych dniach Stack Overflow. Według Jeffa:
Ale czy nolock
? niebezpieczne? Czy możesz zakończyć odczytywanie nieprawidłowych danych z read uncommitted
? na? Tak, teoretycznie. Nie zabraknie astronautów zajmujących się architekturą baz danych, którzy zaczynają rzucać na ciebie nauki o kwasie i uruchamiają alarm przeciwpożarowy w budynku, gdy powiesz im, że chcesz spróbować nolock
.To prawda:teoria jest przerażająca. Ale oto, co myślę:"W teorii nie ma różnicy między teorią a praktyką. W praktyce jest."
Nigdy nie polecałbym używania nolock
jako ogólne „dobre na to, co Ci dolega” poprawka oleju węża na wszelkie problemy z blokadą bazy danych, które możesz mieć. Powinieneś najpierw spróbować zdiagnozować źródło problemu.
Ale w praktyce dodanie nolock
do zapytań, o których absolutnie wiesz, że są proste, proste sprawy tylko do odczytu nigdy nie wydają się prowadzić do problemów... Tak długo, jak wiesz, co robisz.
Jedna alternatywa dla READ UNCOMMITTED
Poziom, który warto rozważyć, to READ COMMITTED SNAPSHOT
. Cytując ponownie Jeffa:
Migawki opierają się na całkowicie nowej metodzie śledzenia zmian danych… to coś więcej niż tylko niewielka logiczna zmiana, wymaga od serwera fizycznej obsługi danych w inny sposób. Po włączeniu tej nowej metody śledzenia zmian danych tworzy kopię lub migawkę każdej zmiany danych. Odczytując te migawki zamiast danych na żywo w czasie rywalizacji, blokady współdzielone nie są już potrzebne podczas odczytów, a ogólna wydajność bazy danych może wzrosnąć.