Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnik.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.62 Mб
Скачать

Защелки

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

Взаимоблокировка

Взаимоблокировка – тупиковая ситуация, которая может возникнуть, когда две (или более) транзакции находятся во взаимном ожидании освобождения блокировок, удерживаемых друг другом.

В табл. 8.7 показаны две транзакции, Т7 и Т8, выполнение которых приводит к взаимоблокировке, поскольку каждая из них входит в состояние ожидания освобождения требуемого ресурса другой транзакцией. В момент времени t1 транзакция Т7 запрашивает и получает исключительную блокировку на элемент данных «Кол-во студентов» в записи ТМ-32, а в момент времени t2 транзакция Т8 получает исключительную

блокировку на элемент данных «Кол-во студентов» в ТМ-31. Когда в момент времени t6 транзакция Т7 запрашивает исключительную блокировку на элемент данных КС в записи ТМ-31, она переводится в состояние ожидания, поскольку этот элемент данных уже заблокирован транзакцией Т8. В момент времени t7 транзакция Т8, в свою очередь, запрашивает исключительную блокировку на элемент данных КС в записи ТМ-32 и также переходит в состояние ожидания, поскольку этот элемент оказывается заблокированным транзакцией Т7. Ни одна из транзакций не в состоянии продолжить свою работу, поскольку каждая ожидает завершения работы другой. Если в системе возникает состояние взаимоблокировки, то вовлеченные в него приложения не смогут разрешить данную проблему собственными силами. Ответственность за обнаружение взаимоблокировок и выхода тем или иным образом из этой тупиковой ситуации должна быть возложена на СУБД.

Таблица 8.7. Пример взаимоблокировки двух транзакций

Время

Транзакция Т7

Транзакция Т8

t1

Начало

транзакции

t2

Исключительная

блокировка

«Кол-во

студентов»

ТМ-32

Начало

транзакции

t3

Считывание

КС из «Кол-во

студентов»

ТМ-32

Исключительная

Блокировка

«Кол-во

студентов»

ТМ-31

t4

КС=КС-5

Считывание

КС из «Кол-во

студентов»

в ТМ-31

t5

Запись КС в

«Кол-во

студентов»

в ТМ-32

КС=КС+10

t6

Исключительная

блокировка

«Кол-во

студентов»

ТМ-31

Запись КС

в «Кол-во

студентов»

в ТМ-31

t7

Ожидание

Исключительная

блокировка

«Кол-во

студентов»

ТМ-32

t8

Ожидание

Ожидание

t9

Ожидание

Ожидание

t10

Ожидание

Ожидание

К сожалению, существует только один способ устранить состояние взаимоблокировки: выполнение одной или нескольких транзакций должно быть отменено. Подобное действие будет сопровождаться откатом всех изменений, внесенных отмененными транзакциями. Для приведенного в табл.8.7 примера можно, допустим, отменить выполнение транзакции T8. Как только ее откат будет завершен, все установленные этой транзакцией блокировки будут освобождены и транзакция Т7 сможет продолжить свое выполнение. Ситуация взаимоблокировки должна быть абсолютно прозрачной для конечных пользователей, поэтому СУБД обязана автоматически перезапустить все отмененные ею транзакции.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]