Настройка уровней изоляции транзакций
COM+ предоставляет разработчикам больше контроля над приложениями, позволяя настраивать уровни изоляции транзакций. Версии COM+ до COM+ 1.5 всегда использовали самый высокий уровень изоляции для транзакций. Хотя этот уровень гарантирует, что целостность данных всегда сохраняется, это может привести к проблемам с производительностью, таким как время ожидания, когда многие транзакции должны выполняться в большой базе данных. Благодаря настраиваемым уровням изоляции опытные разработчики могут увеличить параллелизм для повышения производительности и масштабируемости.
COM+ предоставляет следующие уровни изоляции транзакций.
Level | Description |
---|---|
Сериализованная | Данные, считываемые текущей транзакцией, не могут быть изменены другой транзакцией до тех пор, пока текущая транзакция не завершится. Новые данные не могут быть вставлены, которые повлияют на текущую транзакцию. Это самый безопасный уровень изоляции и используется по умолчанию. |
Уровень изоляции repeatable read | Данные, считываемые текущей транзакцией, не могут быть изменены другой транзакцией до тех пор, пока текущая транзакция не завершится. Любой тип новых данных можно вставить во время транзакции. |
Чтение подтверждено | Транзакция не может считывать данные, изменяемые другой транзакцией, которая не зафиксирована. Это уровень изоляции по умолчанию в Microsoft SQL Server. |
Уровень изоляции read uncommitted | Транзакция может считывать любые данные, даже если она изменяется другой транзакцией. Это наименее безопасный уровень изоляции, но позволяет максимальной параллелизма. |
Любое | Поддерживается любой уровень изоляции. Этот параметр чаще всего используется подчиненными компонентами, чтобы избежать конфликтов. Этот параметр полезен, так как любой подчиненный компонент должен быть настроен с уровнем изоляции, равным или меньше уровня изоляции его непосредственного вышестоящий компонента. Таким образом, подчиненный компонент, имеющий уровень изоляции, настроенный как "Любой" всегда использует тот же уровень изоляции, что и его непосредственный вышестоящий компонент. Если корневой объект в транзакции имеет его уровень изоляции, настроенный на Any, его уровень изоляции становится сериализованным. |
Примечание.
Если подчиненный компонент настроен с более высоким уровнем изоляции, чем компонент вышестоящий и пытается включить в транзакцию, результаты ошибки и прерывания транзакции.
См. также