Dlaczego Oracle nie ma nolocka?

14

W MS SQL Server nolockmożna do tego celu wykorzystać.

Dlaczego nie możemy używać go w Oracle i PLSQL?

sal
źródło

Odpowiedzi:

21

SQL Server zwykle używa innej strategii blokowania niż Oracle. Domyślna strategia używana przez SQL Server oznacza, że ​​wybranie wierszy powoduje nałożenie blokad odczytu (na wiersze, strony lub całą tabelę) *. Dlatego NOLOCKczasami jest to przydatna klauzula - chociaż ogólną wskazówką jest, aby nigdy jej nie używać, ponieważ zmienia ona semantykę poziomów izolacji i może powodować niespójne wyniki w wynikach zapytań.

* (Uwaga: jest to ustawienie domyślne. Jeśli SNAPSHOTzostanie wybrana izolacja, zachowanie będzie inne, a czytelnicy nie będą blokować programów zapisujących).

W Oracle proces odczytu nigdy nie zablokuje procesu zapisu. Poniżej znajduje się fragment „ Oracle Database Concepts 11g Release 2 ”. Zachęcam do obejrzenia, jeśli jesteś zainteresowany tym, jak Oracle zajmuje się tym.

Współbieżność i spójność danych

Podsumowanie zachowania podczas blokowania

Baza danych utrzymuje kilka różnych rodzajów blokad, w zależności od operacji, która uzyskała blokadę. Zasadniczo baza danych używa dwóch rodzajów blokad: blokad wyłącznych i blokad współdzielonych. Tylko jeden blokadę wyłączności można uzyskać dla zasobu, takiego jak wiersz lub tabela, ale wiele blokad udziału można uzyskać dla jednego zasobu.

Zamki wpływają na interakcję czytelników i pisarzy. Czytnik jest zapytaniem o zasób, podczas gdy pisarz jest stwierdzeniem modyfikującym zasób. Następujące reguły podsumowują zachowanie blokujące bazy danych Oracle dla czytelników i pisarzy:

• Wiersz jest zablokowany tylko po zmodyfikowaniu przez pisarza.

Gdy instrukcja aktualizuje jeden wiersz, transakcja uzyskuje blokadę tylko dla tego wiersza. Blokując dane tabeli na poziomie wiersza, baza danych minimalizuje rywalizację o te same dane. W normalnych okolicznościach 1 baza danych nie eskaluje blokady wiersza do poziomu bloku lub tabeli.

• Pisarz wiersza blokuje współbieżnego pisarza tego samego wiersza.

Jeśli jedna transakcja modyfikuje wiersz, wówczas blokada wiersza uniemożliwia innej transakcji jednoczesne modyfikowanie tego samego wiersza.

• Czytelnik nigdy nie blokuje pisarza.

Ponieważ czytnik wiersza go nie blokuje, pisarz może zmodyfikować ten wiersz. Jedynym wyjątkiem jest instrukcja SELECT ... FOR UPDATE, która jest specjalnym rodzajem instrukcji SELECT, która blokuje czytany wiersz.

• Pisarz nigdy nie blokuje czytelnika.

Gdy program piszący zmienia wiersz, baza danych używa cofania danych, aby zapewnić czytelnikom spójny widok wiersza.

BriteSponge
źródło