П. Г. Демидова А. В. Зафиевский А. А. Короткин А. Н. Лататуев Базы данных Учебное пособие
Download 1.32 Mb. Pdf ko'rish
|
Базы данных
6.6. Взаимоблокировки
Взаимоблокировка возникает, когда две или более задач постоянно блокируют друг друга в ситуации, когда у каждой задачи заблокирован ресурс, который пытаются заблокировать другие задачи. Например: Момент времени Задача 1 Задача 2 1 SELECT * FROM t1 2 SELECT * FROM t2 3 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling