Używam SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
w większości moich ogólnych zapytań SQL, głównie dlatego, że zostały mi one wywiercone podczas oryginalnej nauki języka.
Z mojego zrozumienia ten poziom izolacji działa w ten sam sposób, z którego WITH (NO LOCK)
jednak zawsze korzystam SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
.
- Czy kiedykolwiek czas, że należy przy użyciu
WITH (NO LOCK)
ponadSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
. - Czy
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
powstrzymuje innych użytkowników przed blokowaniem się w tabelach, które czytam? - Jeśli
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
służy do zatrzymywania blokad, ale czytam tylko dane, jaki jest sens ich używania? Czy to tylko zapytania systemowe wymagające wygenerowania blokad? Czy warto go używać podczas uruchamiania zapytań, które zwrócą się powiedzmy za 5-10 sekund? - Powiedziano mi, aby nie używać
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
podczas odczytu danych, które zostaną wykorzystane w aktualizacjach, prawdopodobnie w celu uniknięcia aktualizacji brudnych danych. Czy to byłby jedyny powód? - Z typem bazy danych, nad którą pracuję, istnieje środowisko produkcyjne i testowe. Bardzo rzadko wysyłamy zapytania do środowiska produkcyjnego, ale gdy zajdzie taka potrzeba, zwykle używam
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
w moim zapytaniu. Rozumiem, że przy tym możliwe są brudne odczyty. Oprócz otrzymywania danych z powrotem, które mogą nie zostać przypisane do bazy danych (a zatem wyrzucić moje wyniki), jakie inne rodzaje „brudnych odczytów” mogą być możliwe?
Przepraszam za masowe pytania.
READ UNCOMMITTED
wszędzie, w dokładnie taki sam sposób, jak nie używałbym WITH (NOLOCK)
wszędzie (to w zasadzie ta sama rzecz) blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere