Zakresy Poziomu Izolacji Transakcji

Jakie są reguły zakresowe dla poziomów izolacji transakcji w SQL Server 2005? Wiem, co oznaczają różne poziomy, ale nie jak prawidłowo zastosować je poza ręcznie uruchamianym skryptem. Nie mogę znaleźć przewodnika do praktycznego wykorzystania w kodowaniu jakości produkcji.

Oczywiście zakres zaczyna się, gdy użyjesz polecenia takiego jak:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
Ale gdzie to się kończy? Jeśli ustawiam poziom iso w procedurze składowanej, a następnie ten proc wywołuje inny, czy zagnieżdżony proc dziedziczy go? Parzyste lepiej, jeśli eskaluję poziom iso wewnątrz zagnieżdżonego proc, to czy będzie on przenoszony z powrotem do wywołującego proc? Czy polecenia transakcji, takie jak BEGIN TRAN, ROLLBACK i COMMIT, powodują jakieś różnice?

Kiedy przechowywany proc jest wywoływany przez aplikację lub zadanie agenta, czy zmiany poziomu izolacji utrzymują się w jakiś sposób? Czy zawsze muszę powrócić do domyślnego odczytu zatwierdzonego na końcu każdego proc?

Przetestowałbym to w różnych sytuacjach, ale nie wiem jak przeczytać co bieżący poziom izolacji jest ustawiony na.

Author: Andrey Morozov, 2009-06-25

7 answers

Wykonaj następujące czynności i przekonaj się Sam:

CREATE PROCEDURE dbo.KeepsIsolation
AS
BEGIN
PRINT 'Inside sproc that does not change isolation level';
DBCC USEROPTIONS;
END
GO

CREATE PROCEDURE dbo.ChangesIsolation
AS
BEGIN
PRINT 'Inside sproc that changes isolation level';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DBCC USEROPTIONS;
END
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
DBCC USEROPTIONS;
EXEC dbo.KeepsIsolation;
DBCC USEROPTIONS;
EXEC dbo.ChangesIsolation;
-- demonstrates that isolation level restored to REPEATABLE READ after exiting the procedure
    DBCC USEROPTIONS;
 36
Author: A-K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-18 15:44:55

From MSDN

W przypadku wydania ustawionego poziomu izolacji transakcji w procedurze składowanej lub WYZWALACZ, gdy obiekt powróci kontroluje poziom izolacji jest resetowany do poziomu obowiązującego podczas wywoływania obiektu . Na przykład, jeśli ustawiasz powtarzalny odczyt w partii, a partia następnie wywołuje zapisany procedura, która ustawia poziom izolacji na SERIALIZOWALNY, izolacja ustawienie poziomu powraca do powtarzalnego odczytu, gdy procedura składowana zwraca kontrolę do partii.

 15
Author: Andrey Morozov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-06 18:35:32

DBCC USEROPTIONS wyświetli bieżący poziom izolacji wraz ze wszystkimi innymi ustawieniami.

 13
Author: Darryl Peterson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-09 16:54:52

Z książek on line

Tylko jedna z izolacji transakcji Opcje poziomu można ustawić na raz, i pozostaje ustawione na to połączenie dopóki nie zostanie to wyraźnie zmienione. To staje się domyślnym zachowaniem, chyba że opcja optymalizacji jest określona na poziom tabeli w klauzuli FROM oświadczenie.

 4
Author: SQLMenace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-25 19:08:56

Poziom izolacji nie powraca wraz z transakcją.

Poziom izolacji pozostaje aktualny nawet po wywołaniu procedur i funkcji.

 2
Author: Hans Malherbe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-25 19:36:33

Aby uzyskać więcej informacji o poziomach izolacji w SQL Server, w tym o blokadach i ich wpływie na bazę danych, skorzystaj z poniższego linku: http://www.sqllion.com/2009/07/transaction-isolation-levels-in-sql-server/

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-03 19:24:48

Proszę zauważyć, że występuje problem z zakresem poziomów transakcji i SqlServer 2012 lub wcześniejszy, gdy wysoka wydajność ADO.NET pooling połączeń jest używany tam, gdzie może się to utrzymywać podczas zamykania połączenia:

SQL Server: wycieki poziomu izolacji w połączeniach zbiorczych

Https://social.msdn.microsoft.com/Forums/sqlserver/en-US/916b3d8a-c464-4ad5-8901-6f845a2a3447/sql-server-2014-reseting-isolation-level?forum=sqldatabaseengine

 0
Author: dmc2005,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:33