П. Г. Демидова А. В. Зафиевский А. А. Короткин А. Н. Лататуев Базы данных Учебное пособие


Download 1.32 Mb.
Pdf ko'rish
bet81/94
Sana15.06.2023
Hajmi1.32 Mb.
#1487605
1   ...   77   78   79   80   81   82   83   84   ...   94
Bog'liq
Базы данных

6.6. Взаимоблокировки 
Взаимоблокировка возникает, когда две или более задач 
постоянно блокируют друг друга в ситуации, когда у каждой 
задачи заблокирован ресурс, который пытаются заблокировать 
другие задачи. Например:
Момент времени 
Задача 1 
Задача 2 

SELECT * FROM t1 

SELECT * FROM t2 

UPDATE t2 SET a2 = 5 
4
UPDATE t1 SET a1 = 2 
5 COMMIT 
6 COMMIT 
Здесь вначале задача 1 блокирует таблицу t1, а задача 2 бло-
кирует таблицу t2. После этого задача 1 пытается изменить таб-
лицу t2, но не может этого сделать из-за блокировки t2 задачей 2 
и поэтому ожидает завершения задачи 2. В свою очередь, задача 
2 по тем же причинам ожидает завершения задачи 1. Поэтому обе 
задачи находятся в состоянии блокировки и будут находиться в 
состоянии ожидания до тех пор, пока взаимоблокировка не будет 
снята внешним процессом, например принудительным заверше-
нием какой-либо задачи. 
Отметим две особенности приведенного примера. Во-первых, 
предполагается, что обе транзакции выполняются в явном или 
неявном, а не в автоматическом режиме, иначе каждая команда 
фиксируется и не создает блокировки. Во-вторых, для возникно-
вения блокировок необходимо, чтобы уровень изоляции транзак-
ций был не ниже REPEATABLE READ. На более низких уровнях 
изоляции блокировка отсутствует, и обе транзакции завершатся 
успешно. 
Для отслеживания и устранения взаимоблокировок в состав 
СУБД обычно входит специальная системная программа (мони-


132 
тор блокировок), которая периодически (например, каждые 
5 секунд) проверяет блокировки, установленные всеми транзак-
циями, и если находит взаимоблокировку, то принудительно ава-
рийно завершает одну из соответствующих транзакций. В прос-
тейшем же варианте чаще всего можно установить режим, в кото-
ром транзакция завершается, если время ожидания освобождения 
требуемых ресурсов превышает заданную величину (тайм-аут). 
Хотя полностью избежать взаимоблокировок нельзя, для их 
минимизации можно использовать следующие приемы: 
● выполнять доступ к объектам в одинаковом порядке, в 
частности, в приведенном примере задача 2 должна сначала 
обработать таблицу t1, а уже затем – t2; 
● минимизировать размер транзакций; 
● не включать взаимодействие с пользователем в транзакции; 
● использовать 
наиболее 
низкий 
уровень 
изоляции, 
приемлемый для данной задачи. 

Download 1.32 Mb.

Do'stlaringiz bilan baham:
1   ...   77   78   79   80   81   82   83   84   ...   94




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling