Уровни изоляции
Избежать аномалий полностью технически сложно без потери производительности. Поэтому идут на компромисс между числом возможных аномалий и производительностью. Выделяют 4 уровня (по 4 видам аномалий(на самом деле их может быть больше))
На всю базу данных можно установить один из уровней изоляции, в котором будем работать каждая транзакция:
READ UNCOMMITEDREAD COMMITEDREPEATABLE READSNAPSHOTSERIALIZABLE
Установка осуществляется так:
SET TRANSACTION ISOLATION LEVEL <level>Любой уровень спасает от аномалии потерянного обновления
READ Uncommitted

READ Committed

REPEATABLE READ

SNAPSHOT

На этом уровне изоляции нужно будет обрабатывать исключения, т.к. бд может сама откатить транзакцию, если изменения конфликтуют
SERIALIZABLE

Табличка

Блокировки
MS SQL Server сам выбирает, какие объекты нужно заблокировать (оптимально) в контексте каждого выполнения запроса (когда строит план выполнения?). Пользователь может повлиять на выбор с помощью хинтов. Чем меньше детализация, тем выше производительность одной транзакции, которая запрашивает соответствующую блокировку, но и тем больше страдает параллельное выполнение транзакций.
Хинты

Блокируемые объекты
- База данных
- Таблица
- Экстент
- Страница
- Строка
- Диапозон индекса
Эскалация блокировок

Менеджер блокировок
Блокировками занимается менеджер блокировок
Основные задачи:
- Создание и установка блокировок
- Снятие блокировок
- Эскалация блокировок
- Определение совместимости блокировок (дедлоки?)
- Устранение взаимоблокировок (дедлоки)
Менеджер транзакций и менедждер блокировок

Типы блокировок
- Разделяемая (блокировка на запись, но не на чтение)
- Монопольная (полное блокирование ресурса (и на чтение и на запись))
- Блокировка обновления (запрет устанавливать монопольные блокировки другим транзакциям, только разделяемые)
- Блокировки с намерением (intent locks) - на таблицу или страницу
- с намерением разделяемого ресурса (IS)
- с намерением монопольного доступа (IX)
- с намерением обновления (SIX)
- разделяемая блокировка с намерением обновления (SIU)
- блокировка обновления с намерением монопольного доступа (UIX)
- Блокировка стабильности схемы
- С изменением схемы (изменение схемы)
- Стабильности схемы - совместима с монопольной блокировкой - запрещает менять схему данных, разрешает менять данные, а значит и устанавливать блокировки

Просмотр блокировок
Есть функция
sp_lock - возвращает данные из таблицы syslockinfo, находящейся в master
Схема перевода блокировок
