Типы управления параллелизмом
Если несколько пользователей одновременно пытаются выполнять изменения в базе данных, следует реализовать систему элементов управления, с тем чтобы изменения, проводимые одним пользователем, не затрагивали работу другого пользователя. Такая система называется управлением параллелизм.
Теория управления параллелизмом предлагает два способа осуществления управления параллелизмом.
Пессимистическое управление параллелизмом
Система блокировок не допускает, чтобы изменение данных одними пользователями влияло на других пользователей. После того как действие пользователя приводит к блокировке, до тех пор пока инициатор ее не снимет, другие пользователи не могут выполнять действия, которые могут вызвать конфликт с блокировкой. Это называется пессимистическим управлением, поскольку в основном применяется в средах с большим количеством конфликтов данных, где затраты на защиту данных с помощью блокировок меньше затрат на откат транзакций в случае конфликтов параллелизма.
Управление оптимистическим параллелизмом
При оптимистическом управлении параллелизмом пользователи не блокируют данные на период чтения. Когда пользователь обновляет данные, система проверяет, вносил ли другой пользователь в них изменение после считывания. Если другой пользователь изменял данные, возникает ошибка. Как правило, при получении сообщения об ошибке пользователь откатывает транзакцию и начинает ее заново. Это называется оптимистическим управлением, поскольку в основном применяется в средах с небольшим количеством конфликтов данных, где затраты на периодический откат транзакции меньше затрат на блокировку данных при считывании.
MicrosoftSQL Server поддерживает ряд средств управления параллелизмом. Пользователи задают тип управления параллелизмом посредством выбора уровней изоляции транзакций для соединений или параметров параллелизма для курсоров. Эти атрибуты задаются с помощью инструкций Transact-SQL или свойств и атрибутов API-интерфейсов баз данных, таких как ADO, ADO.NET, OLE DB и ODBC.
Дополнительные сведения о параллелизме в курсорах см. в разделе Параллелизм курсоров (компонент Database Engine).
Дополнительные сведения об уровнях изоляции транзакций см. в разделе Уровни изоляции в компоненте Database Engine.