Добавлен: 28.11.2018

Просмотров: 5424

Скачиваний: 10

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

106

                                                   

ДЕЙСТВИЯ

                                                         

РЕЗУЛЬТАТ

 

  

СЧЕТ

  

КЛИЕНТА

                        1. 

Оплата

                

СЧЕТ

  

КЛИЕНТА

 

                                                         

кредита

 

 

 

Клиента

   

Баланс

                      500 $.                 

 

Клиента

       

Баланс

 

 
 
 

КАССОВЫЙ

 

СЧЕТ

                     2. 

Отказ

                     

КАССОВЫЙ

 

СЧЕТ

  

                                                         

системы

 

                 

Баланс

                                                                     

Баланс

  

 

 
 

(

а

Результат

  

независимого

  

выполнения

  

действий

 

 

СЧЕТ

  

КЛИЕНТА

                       

ТРАНЗАКЦИЯ

                   

РЕЗУЛЬТАТ

 

                     

 

  

№Клиента

   

Баланс

                        

 
 
 

КАССОВЫЙ

 

СЧЕТ

 

 
                 

Баланс

 

 

                                  

Никакие

 

изменения

   

не

   

сделаны

,  

так

   

как

 

тран

-

закция

  

не

  

была

  

успешно

  

выполнена

 

(

б

)  

Результат

  

применения

  

неделимой

  

транзакции

 

Рис

. 5.1.  

Независимые

  

и

  

неделимые

  

транзакции

 

5.2. 

Параллельная

  

работа

  

с

  

БД

 

Предположим

,   

что

   

Лига

   

Женщин

-

Избирателей

  (

ЛЖИ

)  

из

  

Москвы

  

решила

  

устроить

  

обед

  

с

  

окороком

  

и

  

индейкой

.  

Ком

-

мерческая

   

Палата

    (

КП

)  

из

   

Томска

       

решила

,  

что

   

пришло

  

время

  

порадовать

  

своих

  

членов

  

обедом

  

с

  

окороками

  

и

  

ово

-

щами

.  

Каждая

   

организация

   

обратилась

   

в

   

своем

   

городе

   

в

  

представительство

  

фирмы

  «

Хелми

».  

ЛЖИ

  

требует

  25  

окоро

-

123    …..      1000    

123        …. .         500

      

 

 

….….        1500       .…     

     …. .      1500      …..     

123   …..      1000

     

.…    

 

1. 

Оплата

 

    

кредита

 

    500 $   
 
 
2. 

Отказ

 

    

системы

   

    

 

….….      1500      .…    

Никаких

  

изме

-

нений

 

в

  

СЧЕТ

 

КЛИЕНТА

 

 

Никаких

  

изме

-

нений

 

в

 

КАС

-

СОВЫЙ

 

СЧЕТ

 


background image

 

107

ков

,  

КП

  

нужно

  35  

окороков

.  

Оба

  

заказа

  

передаются

  

в

  

сис

-

тему

  

БД

  

регионального

  

склада

  

одновременно

  (

рис

. 5.2).  

За

-

каз

  

ЛЖИ

  

приходит

  

на

  

долю

  

секунды

  

раньше

,  

чем

  

заказ

  

КП

.   

 
 

                                                                                  ЛЖИ 
 
                                                                                                     Москва    
 
 
 
                                                                                    
                                                                                    КП                                                
                                                                                                Томск 
               
ЛЖИ                                                                        КП 
 
 
 
 
 
 
                  Порядок  обработки  ЦП   
 
 
 
 
 
 
 

                                  

             

Рис

. 5.2 

Пример

  

параллельной

  

обработки

 

           

Образ

   

инвентарной

   

записи

   

об

   

окороках

   

помещается

   

в

  

рабочую

   

область

   

компьютера

.  

Запись

 

показывает

,  

что

   

на

  

складе

  

есть

  100  

окороков

.  

Но

  

прежде

  

чем

  

транзакция

  

ЛЖИ

  

завершается

  

и

  

инвентарная

  

запись

  

обновляется

,  

транзакция

  

КП

  

также

  

приводит

  

к

  

созданию

  

в

  

рабочей

  

области

  

еще

  

од

-

ной

   

копии

   

той

   

же

   

инвентарной

   

записи

,  

показывающей

,  

что

  

на

  

складе

  100  

окороков

.  

Обе

  

записи

  

показывают

,  

что

  

заказ

  

можно

  

выполнить

 

Заказ 
ЛЖИ 

Заказ 
  КЛ 

     Хелми 

(1)Чтение записи  об  окороках 
(2)Вычитание 25 окороков 
(3)Переписывание  записи об 
     окороках    

(4)Чтение записи  об  окороках 
(5)Вычитание 35 окороков 
(6)Переписывание  записи об 
     окороках    

(1)Чтение записи  об  окороках для  ЛЖИ 
(2)Чтение записи  об  окороках для  КП 
(3)Вычитание для  ЛЖИ (100-25=75) 
(4)Соответствующая новая  запись (75) 
(5)Вычитание для  КП (100-35=65) 
(4)Соответствующая новая  запись (65) 

 

Региональный 
       склад 


background image

 

108

 
 
 

ЛЖИ                                                                                         КП 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

Рис

.5.3  

Простая

  

процедура

  

блокировки

 

 

Предположим

,  

что

  

транзакция

  

ЛЖИ

  

завершена

  

первой

.  

Пере

-

писанная

   

инвентарная

   

запись

   

показывает

  100-25=75  

окороков

,  

оставшихся

  

на

  

складе

.  

После

  

завершения

  

транзакции

  

КП

  

инвен

-

тарная

   

запись

   

снова

   

будет

   

переписана

,  

показывая

  100-35=65  

окороков

  

на

  

складе

.  

В

  

результате

  

на

  

самом

  

деле

  

получается

,  

что

 

из

  100  

окороков

  

на

  

складе

  

продано

 60,  

то

  

есть

  

осталось

  40,  

но

  

запись

  

в

  

системе

  

показывает

,  

что

  

их

  

осталось

  65.  

Этот

  

при

-

мер

  

отражает

  

основную

  

сущность

  

параллельной

  

обработки

Инвентарная  запись  об 

окораках =100 

Конец 

транзакции 

Вычитает 35 

Инвентарная запись 

об окороках=40 

Конец 

транзакции

 

Блокирует  запись 

БД 

Запрашивает копию  

записи  БД 

Передает  копию 

ЦП 

Ждет разблокирование  

записи 

Вычитает 25 

Передает  копию 

ЦП 

Разблокирует  

запись 

Записывает 

новые данные 75 

Записывает 

новые данные 40 

Блокирует 

запись  БД 

Инвентарная 

запись об око-

роках=75 


background image

 

109

            ЛЖИ                                                                        КП 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                
  
                       Бесконечное                                 Бесконечное 
                        ожидание                                         ожидание   
 

 

Рис

. 5.4 

Схема

  

блокировки

,  

приводящая

   

к

  

тупиковой

  

ситуации

 

 

Общим

   

способом

   

предупреждения

   

проблем

,  

связанных

   

с

  

параллельной

   

обработкой

,  

является

   

простая

   

блокировка

.  

В

  

нашем

   

примере

   

первая

   

транзакция

   

должна

   

заблокировать

  

инвентарную

   

запись

   

об

   

окороках

,  

т

.

е

.  

запретить

   

доступ

   

к

  

ней

  

других

  

транзакций

 (

рис

.5.3)  

до

  

тех

  

пор

,  

пока

  

обработка

  

первой

  

транзакции

  

не

  

будет

  

завершена

.  

Когда

  

запись

  

забло

-

кирована

   

одним

   

пользователем

,  

никакой

   

другой

   

пользова

-

тель

  

не

  

может

  

обращаться

  

к

  

ней

  

для

  

обновления

Предположим

,  

что

  

и

  

ЛЖИ

,  

и

  

КП

  

хотят

  

заказать

  

окорока

  

и

  

индеек

  (

рис

.5.4).  

ЛЖИ

   

сначала

 

обращается

   

к

   

инвентарной

  

записи

  

об

  

индейках

.  

Поскольку

  

эта

  

запись

  

заблокирована

,  

то

  

КП

  

сначала

  

обращается

  

к

  

инвентарной

  

записи

  

об

  

окороках

.  

Таким

  

образом

,  

обе

  

записи

  

заблокированы

  

для

  

доступа

  

дру

-

гих

  

пользователей

.  

Затем

  

и

  

ЛЖИ

,  

и

  

КП

  

заканчивают

  

обра

-

Ждет, пока запись 

об индейках будет 

разблокирована  ЛЖИ 

Требует блокировки 

записи об индейках 

Требует блокировки 

записи об окороках 

Запись об индейках 

заблокирована 

Запись об окороках 

заблокирована 

Требует блокировки 

записи об индейках 

Требует блокировки 

записи об окороках 

Ждет, пока запись 
об окороках будет 

разблокирована КП 


background image

 

110

ботку

  

записей

  

об

  

индейках

  

и

  

окороках

  

и

  

готовы

  

обращаться

  

к

  

другой

  

записи

.  

Однако

  

ни

  

один

  

из

  

пользователей

  

не

  

за

-

вершил

  

выполнение

  

транзакции

,  

поэтому

  

обе

  

записи

  

остают

-

ся

  

заблокированными

Существует

  

несколько

  

способов

  

справляться

  

с

 

взаимобло

-

кировкой

.  

Один

  

подход

 – 

фиксировать

  

порядок

  

обращения

  

к

  

записям

.  

Т

.

е

.,  

если

  

требуется

  

обращаться

  

к

  

записям

  

А

 

и

  

В

,  

то

  

к

  

ним

  

всегда

  

нужно

  

обращаться

  

именно

  

в

  

таком

  

порядке

В

   

нашем

   

примере

   

при

   

требовании

   

записей

   

об

   

окороках

   

и

  

индейках

   

можно

   

заставить

   

систему

   

всегда

   

сначала

   

обра

-

щаться

  

к

  

записи

  

об

  

окороках

,  

а

  

затем

 -  

к

  

записи

  

об

  

индей

-

ках

.  

Когда

  

ЛЖИ

  

закончит

  

обработку

,  

все

  

записи

,  

к

 

которым

  

обращались

,  

будут

   

разблокированы

   

и

   

готовы

   

к

   

работе

   

КП

.  

Однако

   

в

   

результате

   

скорость

   

работы

   

может

   

упасть

,  

по

-

скольку

   

ожидание

   

увеличивает

   

время

   

выполнения

   

транзак

-

ций

.  

Более

   

того

,  

если

   

транзакция

   

слишком

   

долго

   

ожидает

  

разблокирования

   

записи

,  

она

   

может

   

быть

   

отменена

   

и

   

ее

 

придется

  

запускать

  

заново

.  

Обычно

  

все

  

это

  

приводит

  

к

  

не

-

довольству

  

пользователей

  

информационной

  

системой

Некоторые

  

СУБД

  

выполняют

  

детекцию

  

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

-

ки

,  

регулярно

  

проверяя

,  

не

 

слишком

  

ли

  

долго

  

продолжается

  

ожидание

   

записи

   

или

   

ресурса

.  

Другой

   

метод

   

детекции

   

со

-

стоит

  

в

  

том

,  

что

  

проводится

  

стрелка

  

от

  

транзакции

  

к

  

иско

-

мой

  

записи

,  

а

  

затем

  

стрелка

  

от

  

записи

  

к

  

транзакции

,  

кото

-

рая

  

в

  

данный

  

момент

  

ее

  

использует

.  

Если

  

граф

  

имеет

  

пет

-

ли

,  

то

   

это

  

означает

,  

что

  

обнаружена

  

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

Это

  

показано

  

на

  

рис

. 5.5 .   

 

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

 

 
 
               

Ожидает

                                                           

Ожидает

 

 
 
 
 
  

ЗАПИСЬ

  

  

БД

 

                                   

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

                    

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

 

 

 

Рис

.5.5 

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

обнаруженная

 

при

 

помощи

 

детектирующих

  

циклов

 

А 

В