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.
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;
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.
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.
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.
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.
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/
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
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