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

Тайм-ауты

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

Предотвращение взаимоблокировок

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

Обнаружение взаимоблокировок

Обнаружение взаимоблокировок обычно выполняется с помощью графа ожидания (Wait-For Graph WFG). Этот граф отражает зависимость транзакций друг от друга. Транзакция Тi считается зависимой от транзакции Tj в том случае, если транзакция Tj заблокировала элемент данных, необходимый для продолжения работы транзакции Ti Граф ожидания представляет собой направленный граф G= (N, Е), который состоит из множества вершин N, множества направленных ребер Е и формируется следующим образом:

  • Создается вершина, соответствующая каждой транзакции.

  • Создается направленное ребро Ti→Tj, если транзакция Тi ожидает освобождения элемента данных, заблокированного в настоящее время транзакцией Тj.

Взаимоблокировка имеет место в том и только в том случае, если граф ожидания содержит цикл. На рис. 8.2 показан граф ожидания для транзакций, представленных в табл. 8.7. Как показывает этот рисунок, граф содержит цикл (Т7→Т8→Т7), поэтому можно сделать вывод, что в системе существует взаимоблокировка.

Рис. 8.2. Граф ожидания, который показывает наличие взаимоблокировки между двумя транзакциями

Частота выполнения операции обнаружения взаимоблокировок

Поскольку наличие цикла в графе ожидания является необходимым и достаточным условием существования в системе взаимоблокировки, алгоритм выявления этих ошибочных ситуаций предусматривает формирование через регулярные промежутки времени графа ожидания и проверку наличия в нем цикла. Выбор промежутка времени между последовательными сеансами выполнения алгоритма имеет важное значение. Если установленный промежуток окажется слишком коротким, выявление взаимоблокировок потребует значительных дополнительных издержек. Если выбранный промежуток окажется слишком продолжительным, наличие взаимоблокировки может оставаться незамеченным в течение длительного времени. Еще один вариант предусматривает применение динамического алгоритма обнаружения взаимоблокировок, выполнение которого начинается с определенного первоначального значения промежутка времени. После каждого сеанса выполнения алгоритма контролируется наличие обнаруженной взаимоблокировки.

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

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