Użycie poziomu izolacji SNAPSHOT doda dużo obciążenia do tempdb w miarę wzrostu obciążenia bazy danych.
Zmiana metod blokowania najlepiej wykonywać za pomocą podpowiedzi blokujących w zapytaniach lub zmieniając POZIOM ISOLACJI ogólnie dla procedury składowanej lub połączenia. Dokonuje się tego za pomocą polecenia SET ISOLATION LEVEL lub zmieniając poziom izolacji na obiekcie połączenia w .NET.
Jeśli chcesz, aby program SQL Server obsługiwał blokowanie na poziomie innym niż domyślny poziom strony (np. Blokowanie na poziomie wiersza), który musi być obsługiwany na poziomie instrukcji za pomocą instrukcji WITH (ROWLOCK) w sprawozdania.
UPDATE YourTable (WITH ROWLOCK)
SET Col2 = 3
WHERE Col1 = 'test'
Nie istnieje ustawienie globalne zmiany tego poziomu blokady, a jeśli dulka jest stosowany w połączeniu z operacjami poziom izolacji migawka nadal będzie odbywać się na poziomie strony jako cała strona ma zostać skopiowany od do Baza danych tempdb jest następnie aktualizowana, a następnie stara wersja musi zostać usunięta z bazy danych tempdb.
OK, ale jak sprawdzić, jaki jest obecny poziom izolacji? Czy ten poziom izolacji ma zastosowanie tylko do zapytań działających w transakcjach lub wszystkich zapytań? – Allrameest
Można uruchomić DBCC USEROPTIONS, a jedną z zwróconych pozycji będzie bieżące ustawienie "poziomu izolacji". Oto link MSDN: http://msdn.microsoft.com/en-us/library/ms180065.aspx –
Jeśli chodzi o drugą część twojego pytania, aby użyć poziomu izolacji w transakcji, musisz go ustawić za pomocą "USTAWIENIE POZIOMU IZOLACJI USTAWIENIA TRANSAKCJI" przed instrukcją "BEGIN TRAN". Tak więc rozumiem, że ma ona wpływ tylko na zapytania transakcyjne, za które wyraźnie je zadeklarowano. Przykładem tego są powyższe linki. Przyjemny artykuł wyjaśniający to można również przeczytać tutaj: http://www.databasejournal.com/features/mssql/article.php/3566746/Controlling-Transactions-and-Locks-Part-5-SQL-2005-Sapshots.htm –