Подсистема блокирования

Оценить
(0 голоса)

Если несколько пользователей одновременно желают модифицировать одну и ту же страницу данных, то системе СУБД необходим способ, гарантирующий, что изменения не будут взаимно противоречивы. Системы баз данных имеют сложные подсистемы блокирования для необходимого пользователю уровня захвата ресурса.

Перед выполнением изменения по команде пользователя производится захват либо строки базы данных, либо страницы (блока данных), а иногда и всей таблицы. Остальным пользователям, желающим модифицировать ту же страницу, необходимо подождать, пока не произойдет разблокировка. Блокировка снимается после выполнения модификаций.

Для различных целей используются разные типы блокировок. Блокировка Share lock - разделяемая, или совместного использования - помечает строку или таблицу, которая считывается одним приложением, и делает ее доступной остальным приложениям в режиме только для чтения. Блокировка Update lock - обновления - похожа на блокировку совместного использования с тем отличием, что она указывает на намерение обновления строки или таблицы, которая будет блокироваться. Блокировка Exclusive lock - исключения - показывает, что строка или таблица изменяется лишь одним приложением и не доступна остальным.

Уровни изоляции влияют на типы блокировок, получаемые приложением: уровни изоляции могут быть установлены либо глобально, либо для одной транзакции. К уровням изоляции относится следующее:

•             Устойчивость чтения. Блокировки совместно используемых строк удерживаются до следующей фиксации или отката транзакции. Однако устойчивость чтения не запрещает новые строки, которые будут добавлены к результирующему набору путем вставки или обновления, поэтому при повторении тот же самый запрос может вернуть дополнительные строки.

•             Повторяемость чтения. Блокировки совместно используемых строк удерживаются до следующей фиксации или отката транзакции. Каждая строка рассматри-

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

•             Стабильность указателя. Блокировки совместно используемых строк удерживаются только во время обработки определенной строки. Если в результирующий набор возвращается множество строк, то блокируется только текущая строка. Этот уровень изоляции увеличивает возможности параллельной обработки и часто используется для приложений.

•             Чтение без фиксации (или грязное чтение). Блокировки совместно используемых строк не применяются, если считываются одиночные строки или если открываются и считываются указатели (указывают на определенную строку при возврате множества строк) только для чтения. Уровень изоляции грязного чтения повышает производительность, однако может негативно отразиться на целостности данных.

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

Другой важной функцией блокировки, используемой базой данных, является слежение за deadlocks - взаимными блокировками. Предположим, например, что Пользователь 1 удерживает блокировку на странице 123 Таблицы А и ожидает пока произойдет разблокирование страницы 987 Таблицы Б. Тем временем Пользователь 2 удерживает блокировку на странице 987 Таблицы Б и ожидает пока Пользователь 1 раз- блокирует страницу 123 Таблицы А. Оба пользователя оказываются в вечном ожидании, вызывая взаимоблокировку, или "тупиковую ситуацию" (клинч). База данных имеет в своем распоряжении процесс, или поток, называемый deadlock monitor (монитор взаимоблокировок) и производящий отслеживание взаимоблокировок; одна из пользовательских транзакций будет прервана монитором взаимоблокировки, позволяя другой успешно завершиться. Пользовательский процесс должен следить за кодом возврата транзакции, обнаруживать взаимоблокировки и повторять аварийную транзакцию.

Системный монитор
Мониторинг баз данных
Многопотоковые архитектуры
Параллельная обработка
Репликационные (тиражируемые) базы данных

Добавить комментарий


Защитный код
Обновить