Реклама:
Шумаков П. В.  ADO.NET и создание приложений баз данных в среде Microsoft Visual Studio .NET. Руководство разработчика с примерами на C#.

рис. 6.49

6.3.2.2. Уровень изоляции READ COMMITTED

Потерянные изменения невозможны. Для всех прочих транзакций блокируется внесение изменений в данные, в которые другой транзакцией X уже внесены неподтвержденные изменения). Блокировка снимается после завершения транзакции X.

Грязное чтение невозможно. Если транзакция X внесла изменения в данные и не подтвердила и не откатила изменений, то никакие другие транзакции не смогут считывать эти данные до тех пор, пока X не завершится.

Проблема неповторяемого чтения остается.

Проблема чтения фантомов остается.

6.3.2.3. Уровень изоляции REPEATEABLEREAD

Потерянные изменения невозможны. Генерируется исключение при попытке внесения транзакцией Y изменений в данные, в которые другой транзакцией X уже внесены неподтвержденные изменения.

Грязное чтение невозможно. Если транзакция X внесла изменения в данные и не подтвердила и не откатила изменений, то никакие другие транзакции не смогут считывать эти данные до тех пор, пока X не завершится.

Неповторяемое чтение невозможно. Если транзакция X считала данные, то никакие другие транзакции не смогут изменить эти данные до тех пор, пока транзакция X не завершится.

Проблема чтения фантомов остается.

6.3.2.4. SERIALIZABLE

Потерянные изменения невозможны. Генерируется исключение при попытке внесения транзакцией Y изменений в данные, в которые другой транзакцией X уже внесены неподтвержденные изменения.

Грязное чтение невозможно. Если транзакция X внесла изменения в данные и не подтвердила и не откатила изменений, то никакие другие транзакции не смогут считывать эти данные до тех пор, пока X не будет подтверждена или откачена.

Неповторяемое чтение невозможно. Если транзакция X считала данные, то никакие другие транзакции не смогут изменить эти данные до тех пор, пока транзакция X не завершится.

Чтение фантомов невозможно. Если транзакция X считала данные, то никакие другие транзакции в этом диапазоне данных не могут добавлять или удалять записи до тех пор, пока X не завершится.

6.3.3. Выбор подходящего уровня изоляции транзакций

Выбор уровня изоляции транзакций - это, собственно, компромисс между безопасностью данных и производительностью. Чем ниже уровень изоляции, тем выше производительность. С увеличением уровня изоляции производительность приложения падает: параллельно работающие пользователи должны ожидать, пока разблокируются данные, заблокированные другими транзакциями. Если, например, транзакции уровня Read Committed блокируют только фактически измененные ею данные, то транзакции уровня Serializable полностью блокируют даже считанные данные и к ним уже никто до завершении такой транзакции обратиться не может.

По умолчанию в ADO.NET принят уровень Read Committed.

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


⇐ Предыдущая страница| |Следующая страница ⇒