Совет. Транзакция должна быть завершена как можно скорее (запущена как можно позже и завершена как можно раньше). К тому же активная транзакция блокирует различные задействованные ресурсы, поэтому вам следует выбирать только те строки таблиц, которые действительно необходимы.

Уровни изоляции

Уровень изоляции определяет, насколько чувствительна транзакция к изменениям, выполняемым в других исполняющихся транзакциях. Например, по умолчанию, когда транзакции выполняются независимо друг от друга, записи, вставляемые одной транзакцией, невидимы для другой транзакции, до тех пор, пока первая транзакция не будет зафиксирована.

Концепция уровней изоляции тесно связана с концепцией блокировок, поскольку уровень изоляции, указанный для данной транзакции, определяет типы необходимых блокировок. Разделяемые блокировки — это те блокировки, которые устанавливаются, когда транзакция желает читать данные из базы. Никакая другая транзакция не может модифицировать данные, пока установлена разделяемая блокировка на таблице, строке или диапазоне. Однако более одного пользователя могут использовать разделяемую блокировку для одновременного чтения данных. Исключительные блокировки — это блокировки, которые предотвращают одновременную модификацию данных двумя или более транзакциями. Исключительная блокировка устанавливается, когда транзакция собирается обновить данные, и никакой другой блокировки на этот момент не установлен. Ни один другой пользователь, не сможет модифицировать данные, пока на них установлена исключительная блокировка.

На заметку! SQL Server на самом деле поддерживает несколько типов блокировок, работающих совместно, чтобы предотвратить взаимные блокировки и другие неприятные ситуации. Чтобы узнать больше, обратитесь к информации о блокировках в руководстве SQL Server Books Online Help, которое инсталлируется вместе с SQL Server.

В хранимых процедурах SQL Server вы можете устанавливать уровни изоляции, используя команду SET TRANSACTION ISOLATION LEVEL. В ADO.NET вы можете передать значение перечисления IsolationLevel методу Connection.BeginTransaction(). В табл. 7.6 перечислены его возможные значения.

Уровни изоляции в табл. 7.6 располагаются от наименьшей степени блокировки до наибольшей. Уровень по умолчанию ReadCommitted — хороший компромисс для большинства транзакций. В табл., 7.7 описано поведение блокировки для разных уровней изоляции.

 

предыдущая    следующая страница   оглавление

329

Hosted by uCoz