Używam SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDw 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 UNCOMMITTEDpowstrzymuje innych użytkowników przed blokowaniem się w tabelach, które czytam? - Jeśli
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDsł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 UNCOMMITTEDpodczas 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 UNCOMMITTEDw 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 UNCOMMITTEDwszę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