В SQL Server 2005 и 2008, как сказать, что я использую пессимистическую модель параллелизма или оптимистическую модель?
Я знаю, что SQL Server 2000 имеет пессимистическую модель параллелизма. И оптимистическая модель была добавлена в SQL Server 2005. Так как мне определить, использую ли я модель пессимистичного параллелизма или оптимистическую модель в SQL Server 2005 и 2008?
Благодарю.
3 ответа
В SQL 2005 (и 2008) вводится SNAPSHOT. Это способ перейти к оптимистичному параллелизму. Ознакомьтесь с разделом "Изоляция транзакций" и "Новый уровень изоляции моментальных снимков":
Isolation level Dirty Reads Non-repeatable Phantom reads Concurrency
reads control
READ UNCOMMITTED Yes Yes Yes Pessimistic
READ COMMITTED No Yes Yes Pessimistic
(with locking)
READ COMMITTED No Yes Yes Optimistic
(with snapshot)
REPEATABLE READ No No Yes Pessimistic
SNAPSHOT No No No Optimistic
SERIALIZABLE No No No Pessimistic
После прочтения некоторых статей и документов от Microsoft. Я получил следующий вывод.
На SQL Server 2005+
- Если вы используете чтение незафиксированное, повторяемое чтение или сериализуемый уровень изоляции, вы используете модель пессимистического параллелизма.
- Если вы используете уровень изоляции моментальных снимков, вы используете оптимистическую модель параллелизма.
- Если вы используете уровень изоляции для фиксации чтения и параметр базы данных read_committed_snapshot включен, то вы используете оптимистическую модель параллелизма
- Если вы используете уровень изоляции для фиксации чтения и параметр базы данных read_committed_snapshot имеет значение OFF, то вы используете модель пессимистического параллелизма
Однако мне все еще нужно подтверждение. Также, если есть некоторый код для тестирования модели параллелизма, это было бы здорово.
В принципе:
Пессимистично: вы блокируете запись только для себя, пока не закончите с ней. Поэтому прочитайте уровень изоляции совершенных транзакций. (не безоговорочно, как вы сказали)
Оптимистичный контроль параллелизма работает при условии, что конфликты ресурсов между несколькими пользователями маловероятны, и он позволяет выполнять транзакции без блокировки каких-либо ресурсов. Ресурсы проверяются только тогда, когда транзакции пытаются изменить данные. Это определяет, возник ли какой-либо конфликт (например, путем проверки номера версии). В случае возникновения конфликта приложение должно прочитать данные и повторить попытку. Оптимистичный контроль параллелизма не поставляется с продуктом, но вы можете встроить его в свое приложение вручную, отслеживая доступ к базе данных. ( Источник)