Проблема зависимости от незафиксированных обновлений

Рис. 11.7 и 11.8 являются модифицированными вариантами рис. 11.2 и 11.3 соответственно, показывающими, что произошло бы при параллельном исполнении представленных на этих рисунках транзакций под управлением механизма блокирования, используемого в системе DB2. Нетрудно видеть, что операция транзакции А, запрашиваемая в момент t2 (FETCH—на рис. 11.7 и UPDATE—на рис. 11.8), в обоих случаях не выполняется, поскольку это неявный запрос на блокировку R, а такой запрос вступает в конфликт с уже установленной транзакцией В блокировкой типа X. Поэтому А переходит в состояние ожидания. Она остается в этом состоянии до тех пор, пока В не достигнет точки синхронизации, выполняя операцию COMMIT или ROLLBACK. При этом установленная транзакцией В блокировка снимается, и А получает возможность продолжать исполнение. В этот момент А «видит» зафиксированное значение — либо значение, предшествующее исполнению В, если В завершается операцией ROLLBACK, либо значение, соответствующее успешному завершению В, в противном случае. В любом случае А больше не зависит от незафиксированных обновлений.

  Транзакция А Время Транзакция В
     
     
  t1 UPDATE R
      (запрос блокировки
      типа Х для R)
  FETCH R t2
  (запрос блокировки    
  типа S для R)    
  ждать    
    t3 точка синхронизации
  ждать     (снять блокировку типа
        Х для R)
  ждать    
  повторно: FETCH R t4  
         
(установить блокировку      
  типа S для R)      
       
         

Рис. 11.7. Предотвращается ситуация, когда транзакция А «увидела» бы в момент t2 незафиксированное изменение

Транзакция А Время Транзакция В
   
   
t1 UPDATE R
    (установить блокировку
    типа Х для R)
UPDATE R t2
(запрос блокировки    
типа Х для R)    
ждать    
ждать t3 точка синхронизации
ждать     (снять блокировку типа
      Х для R)
повторно: UPDATE R t4  
(установить блокировку      
типа Х для R)      
       
         

Рис. 11.8. Предотвращается ситуация, когда транзакция А обновила бы в момент t2 незафиксированное изменение


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: