Механизмы - Транзакции и блокировки

Page / - Изменено Alexandr Fokin в 2020/10/06 09:24

Транзакции и блокировки

Изменено Alexandr Fokin

в 2020/10/06 09:24

Оглавление

Мехинизм работы БД строиться на блокировках.

Блокировка может применяться к разным объектам (строки, страницы, таблицы ...)

Блокировки могут иметь разный типы
Разрешить чтение, но запретить запись
Запретить любой доступ

Одиночные операции, выполняемые вне явной транзакции, тоже использую блокировки

При разрыве соединения неподтвержденная транзакция будет прервана (rollback)

Блокировки задаются автоматически во время запросов и транзакций.

На блокировки можно явно влиять, используя табличные указания.

Например блокировку можно взять при select запросе до окончания транзакции. Другие транзакции при попытке взять блокировку на этот объект будут ожидать.

В случае обнаружения deadlock sql сервер среди 2 транзакций выбриает одну.
Одна продолжит выполнение, а вторая прервется с ошибкой, которую должно обработать приложение. (В том числе возможно попытаться повторить транзакцию, рассчитывая, что в этот раз блокировки не будет или хотя бы она завершиться удачно, для этой транзакции)

Понятие оптимистичной и пессимистичной блокировок.
Оптимистичная:
Берем элемент (не блокируя) (фиксируем version/timestamp)
Производим обработку.
Проверяем, что version/timestamp не изменился. (иначе ошибка/повторная обработка/игнорирования, что исходные данные изменились с момента начала обработки)
Сохраняем элемент.
Пессимистичная:
Берем элемент. (блокируя его некоторым образом) (в момент блокировки другой обработчик не может получить доступ и ожидает)
Производим обработку.
Сохраняем элемент.

docs.microsoft | Руководство по блокировке и управлению версиями строк транзакций
docs.microsoft | Табличные указания
infostart.ru | Типы блокировок в MS SQL Server
infostart.ru | Как посмотреть, какие данные заблокированы в СУБД MS SQL Server
Habr | Типичные взаимные блокировки в MS SQL и способы борьбы с ними
Professor web | Блокировки

https://medium.com/@recepinancc/til-9-optimistic-vs-pessimistic-locking-79a349b76dc8
https://enterprisecraftsmanship.com/posts/optimistic-locking-automatic-retry/