Разделяемые блокировки (S-блокировки, S-Locks - Shared locks) - блокировки с взаимным доступом, могут одновременно устанавливаться несколькими пользователями. Данный тип блокировки называют блокировкой чтения. Объекты, заблокированные блокировкой чтения, не изменяются в ходе выполнения транзакции и доступны другим транзакциям.
Блокировки могут быть применены к разному типу объектов. Наибольшим объектом блокировки может быть вся БД (dbspace-level locking), однако этот вид блокировки сделает БД недоступной для всех приложений, которые работают с данной БД.
Следующий тип объекта блокировки — это таблицы (table-level locking). Транзакция, которая работает с таблицей, блокирует ее на все время выполнения транзакции. Этот вид блокировки предпочтительнее предыдущего, потому что позволяет параллельно выполнять транзакции, которые работают с другими таблицами. Иногда используются блокировки на уровне элемента таблицы (item-level locking) или блокировка на уровне табличного пространства (tablespace-level locking).
В ряде СУБД реализована блокировка на уровне страниц (page-level locking). В этом случае СУБД блокирует только отдельные страницы на диске, когда транзакция обращается к ним. Этот вид блокировки еще более мягок и позволяет разным транзакциям работать даже с одной и той же таблицей, если они обращаются к разным страницам данных.
В некоторых СУБД возможна блокировка на уровне строк (row-level locking), однако такой механизм блокировки требует дополнительных затрат на поддержку этого вида блокировки.
Блокировка может быть автоматической и явной. Если запускается новая транзакция, СУБД сначала проверяет, не заблокирована ли другой транзакцией строка, требуемая этой транзакции: если нет, то строка автоматически блокируется и выполняется операция над данными; если строка заблокирована, транзакция ожидает снятия блокировки. Явная блокировка, накладываемая командой LOCK (SQL), обычно используется тогда, когда транзакция затрагивает существенную часть отношения.
Правила взаимного доступа к заблокированным объектам можно представить в виде матрицы совместимости блокировок. Если транзакция A устанавливает блокировку на некоторый объект, а транзакция B в следующий момент времени пытается выполнить аналогичные действия, то успешность блокирования объекта транзакцией B определяется матрицей совместимости (таблица 8.1).
Таблица 8.1 - Матрица совместимости X- и S- блокировок
Do'stlaringiz bilan baham: |