Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Что такое оптимистическая и пессимистические блокировки? Где они задаются?  [new]
SADT
Member

Откуда:
Сообщений: 216
Добрый вечер. Продолжаю изучать SQL Server и клиент-серверную технологию. Возник вопрос: что такое оптимистические и пессимистические блокировки?

Как они связаны с уровнями изоляции? Прочитал главу про блокировки в книге Тома Кайта «Oracle для профессионалов» (не про MS SQL Server, но всё же) и вроде как понял, что это такой способ программирования на клиенте – явно указываем когда и что делать.
Значит, по умолчанию в MS SQL Server реализована оптимистическая блокировка, которая, например, не даст появиться потерянному обновлению при попытке перезаписи данных во второй транзакции, если первая уже внесла изменения в эти данные. А при пессимистической блокировке я сразу во время выборки данных для обновления даю подсказку серверу, чтобы он заблокировал эти данные (FOR UPDATE или как это в MS SQL?). Без подсказок – оптимистическая, с подсказками – пессимистическая, правильно?

И где можно про это почитать, желательно с примерами кода?
3 окт 09, 22:45    [7738700]     Ответить | Цитировать Сообщить модератору
 Re: Что такое оптимистическая и пессимистические блокировки? Где они задаются?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

"Inside MS SQL Server 2005 - Storage Engine"

Concurrency Models
In either concurrency model, a conflict can occur if two processes try to modify the same data at the same time. The
difference between the two models lies in whether conflicts can be avoided before they occur or can be dealt with in
some manner after they occur.

Pessimistic Concurrency
With pessimistic concurrency, the default behavior is for SQL Server to acquire locks to block access to data that
another process is using. Pessimistic concurrency assumes that enough data modification operations are in the system
that any given read operation will likely be affected by a data modification made by another user. In other words, the
system behaves pessimistically and assumes that a conflict will occur. Pessimistic concurrency avoids conflicts by
acquiring locks on data that is being read, so no other processes can modify that data. It also acquires locks on data
being modified, so no other processes can access that data for either reading or modifying. In other words, readers
block writers and writers block readers in a pessimistic concurrency environment.

Optimistic Concurrency
Optimistic concurrency assumes that there are sufficiently few conflicting data modification operations in the system
that any single transaction is unlikely to modify data that another transaction is modifying. The default behavior of
optimistic concurrency is to use row versioning to allow data readers to see the state of the data before the
modification occurs. Older versions of data rows are saved, so a process reading data can see the data as it was when
the process started reading and not be affected by any changes being made to that data. A process that modifies the data
is unaffected by processes reading the data because the reader is accessing a saved version of the data rows. In other
words, readers do not block writers and writers do not block readers. Writers can and will block writers, however, and
this is what causes conflicts. SQL Server generates an error message when a conflict occurs, but it is up to the
application to respond to that error.




по умолчанию в ms sql используется пессимистическая модель управления параллелизмом.

Posted via ActualForum NNTP Server 1.4

3 окт 09, 22:55    [7738714]     Ответить | Цитировать Сообщить модератору
 Re: Что такое оптимистическая и пессимистические блокировки? Где они задаются?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Прочитал главу про блокировки в книге Тома Кайта «Oracle для профессионалов»
> (не про MS SQL Server, но всё же)

oracle и ms sql это все-таки достаточно разные субд.
Том Кайт, говорят, в oracle большой авторитет, но пытаться
изучать ms sql по его книгам все же не стоит.

Posted via ActualForum NNTP Server 1.4

3 окт 09, 23:03    [7738725]     Ответить | Цитировать Сообщить модератору
 Re: Что такое оптимистическая и пессимистические блокировки? Где они задаются?  [new]
SADT
Member

Откуда:
Сообщений: 216
Получается, что пессимистическая блокировка – это блокировка с уровнями изоляции Read Committed, Repeatable Read и Serializable, а оптимистическая – Snapshot? При пессимистической блокировке они ведут себя как в механизме двухфазной блокировки с поправкой на уровень изоляции, а при оптимистической они как таковые не налагаются, а при фиксации сервер смотрит – а был ли конфликт?

А что происходит в этот момент в клиентском коде: исключение или просто возврат нуль обработанных строк (для ExecuteQuery() в .Net)?
3 окт 09, 23:24    [7738742]     Ответить | Цитировать Сообщить модератору
 Re: Что такое оптимистическая и пессимистические блокировки? Где они задаются?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Получается, что пессимистическая блокировка – это блокировка с уровнями
> изоляции Read Committed, Repeatable Read и Serializable, а
> оптимистическая – Snapshot?

Read Committed Snapshot - это тоже оптимистическая модель.
собственно, оптимистичность/пессимистичность и уровни изоляции
это своего рода ортогональные понятия. уровень изоляции определяет
возможные несоответствия при параллельном выполнении транзакций
(грязное чтение, неповторяющееся чтение, фантомы), а модель
управления параллелизмом - механизм избегания этих несоответствий.
поскольку механизмы все-таки сильно разные, тот же Snapshot выделен
в отдельный уровень изоляции. хотя формально он и обеспечивает
отсутствие проблем вплоть до фантомов, как и serializable, но, все же,
не дает полного эффекта последовательного выполнения транзакций,
как последний.
я так понимаю.

Posted via ActualForum NNTP Server 1.4

3 окт 09, 23:46    [7738768]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить