Базы данных. Учебное пособие


Параллельная работа с БД - часть 4


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

Овал: 2
Овал: 1

 


ПОЛЬЗОВАТЕЛЬ

 

 


               Ожидает                                                           Ожидает

 

 

 

Овал: А
Овал: В

 


  ЗАПИСЬ

  БД

                                   Используется                    Используется

 

 

Рис.5.5 Взаимоблокировка, обнаруженная при помощи

детектирующих  циклов

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

Другой  способ  контроля  параллельной  обработки  -  двухфазная  блокировка.  Говорят,  что  транзакция  следует  протоколу  двухфазной  блокировки,  если  все  операции  блокировки  -  read_lock,  write_lock  -  предшествуют  первой  операции  разблокирования  в  транзакции.  Опция  read_lock  позволяет  считывать  запись,  а  write_lock  позволяет  и  считывать,  и  обновлять  данную  запись.  Проверено,  что  транзакции  могут  выполняться  так,  что  их  результаты  будут  такими  же,  как  если  бы  они  выполнялись  одна  за  другой  без  прерывания.  Однако  у  двухфазной  блокировки  тоже  есть  свои  недостатки.  Она  может  привести  к  взаимоблокировке,  если совместно  с  ней  не  применяется  протокол  предотвращения  взаимоблокировки.

В  качестве  примера  на  рис. 5.6  видим  процедуру  двухфазной  блокировки,  приводящую  к  взаимоблокировке. 

 

 

Рис.5.6 Пример двухфазной блокировки, приведшей

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

 

Транзакция  1  (Т1)  задает  опцию  read_lock  для  записи  О (окорок);  одновременно  Т2 задает  опцию  read_lock    для  записи  И  (индейка).  Через два  шага  и  Т1,  и  Т2  требуют  опцию  write_lock  для  той  записи, которая  удерживается  опцией  read_lock  другой  транзакции.  Такое  действие  запрещено,  так  как  в  этом  случае  значение  может  быть  изменено  операцией  записи,  выполненной  другой  транзакцией.  Тогда  конкурирующий  источник  опции  read_lock  может  считать  неверное  значение.   




Начало  Назад  Вперед



Книжный магазин