Виды блокировок в SQL:
-
По уровню:
- Блокировка таблиц (Table Locks): Блокирует всю таблицу. Простая в реализации, но может значительно снизить параллелизм. Хорошо подходит для операций, модифицирующих всю таблицу (например,
ALTER TABLE).
- Блокировка строк (Row Locks): Блокирует отдельные строки. Обеспечивает высокий параллелизм, но требует больше ресурсов для управления. Используется по умолчанию в большинстве СУБД для
INSERT, UPDATE, DELETE.
-
По типу доступа:
- Разделяемая блокировка (Shared Lock - S Lock): Позволяет нескольким транзакциям считывать данные одновременно, но запрещает запись другим транзакциям.
- Монопольная блокировка (Exclusive Lock - X Lock): Позволяет только одной транзакции получать доступ к данным (как для чтения, так и для записи) и запрещает доступ другим транзакциям.
- Блокировка намерения (Intention Lock): Используется для указания СУБД, что транзакции планируют установить блокировку на более низком уровне (строки или таблицы). Например,
IS (Intention Shared), IX (Intention Exclusive). Помогает СУБД быстрее проверить совместимость блокировок.
-
Другие виды:
- Блокировка диапазона (Range Lock): Блокирует диапазон строк в индексе. Используется для предотвращения фантомного чтения.
- Блокировка метаданных (Metadata Lock): Блокирует метаданные объекта (таблицы, представления и т.д.). Используется при выполнении DDL-операций.
Совместимость блокировок определяет, могут ли несколько транзакций одновременно удерживать определенные типы блокировок на одном объекте.
| Тип блокировки | S | X | IS | IX |
|---|
| S | Да | Нет | Да | Нет |
| X | Нет | Нет | Нет | Нет |
| IS | Да | Нет | Да | Да |
| IX | Нет | Нет | Да | Да |