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



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


              

 

                       Бесконечное                                 Бесконечное

                        ожидание                                         ожидание 

 

Рис. 5.4 Схема  блокировки,  приводящая 

к  тупиковой  ситуации

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

Предположим,  что  и  ЛЖИ,  и  КП  хотят  заказать  окорока  и  индеек (рис.5.4).  ЛЖИ  сначала обращается  к  инвентарной  записи  об  индейках.  Поскольку  эта  запись  заблокирована,  то  КП  сначала  обращается  к  инвентарной  записи  об  окороках.  Таким  образом,  обе  записи  заблокированы  для  доступа  других  пользователей.  Затем  и  ЛЖИ,  и  КП  заканчивают  обработку  записей  об  индейках  и  окороках  и  готовы  обращаться  к  другой  записи.  Однако  ни  один  из  пользователей  не  завершил  выполнение  транзакции,  поэтому  обе  записи  остаются  заблокированными.

Существует  несколько  способов  справляться  с взаимоблокировкой.  Один  подход – фиксировать  порядок  обращения  к  записям.  Т.е.,  если  требуется  обращаться  к  записям  А и  В,  то  к  ним  всегда  нужно  обращаться  именно  в  таком  порядке. В  нашем  примере  при  требовании  записей  об  окороках  и  индейках  можно  заставить  систему  всегда  сначала  обращаться  к  записи  об  окороках,  а  затем -  к  записи  об  индейках.  Когда  ЛЖИ  закончит  обработку,  все  записи,  к которым  обращались,  будут  разблокированы  и  готовы  к  работе  КП.  Однако  в  результате  скорость  работы  может  упасть,  поскольку  ожидание  увеличивает  время  выполнения  транзакций.  Более  того,  если  транзакция  слишком  долго  ожидает  разблокирования  записи,  она  может  быть  отменена  и  ее придется  запускать  заново.  Обычно  все  это  приводит  к  недовольству  пользователей  информационной  системой.




Содержание  Назад  Вперед