Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции_часть1.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
243.79 Кб
Скачать

3.5. Расписание транзакций Последовательное исполнение транзакции при использовании блокировок элементов замедляет процесс работы с бд, хотя и работает правильно. Т1: lock a; unlock a;

---------------------------------------------------------T2:LOCK A; UNLOCK A; 

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

Расписание считается последовательным, если все шаги каждой транзакции выполняются последовательно, и сериализуемым, если его результат эквивалентен результату некоего последовательного расписания.

Пример 3.4. Рассмотрим, например, следующие две транзакции, которые могут быть частью бухгалтерской операции по переводу денежных средств с одного счёта на другой. Т1: READ A; A:=A-10; WRITE A; READ B; B:=B+10; WRITE B;  T2: READ B; B:=B-20; WRITE B; READ C; C:=C+20; WRITE C;  Понятно, что любое последовательное расписание обладает свойством постоянства суммы A+B+C. Пример расписания: А+В+С  

Последовательное:

      Т1                                      Т2  READ A                          A=A-10                          WRITE A                      READ B                           B=B+10                          WRITE B                                                                                                                            READ B                                               B=B-20                                             WRITE B                                             READ C                                               C=C+20                                               WRITE C Сериализуемое: Т1                                                                    Т2 READ A                                                                  

  READ B A=A-10                                                                    

B=B-20 WRITE A                                                                  

WRITE B READ B                                                                    

READ C B=B+10                                                                    

C=C+20 WRITE B                                                                 

WRITE C Несериализуемое:

Т1                                                                       Т2 READ A A=A-10                                                                       READ B WRITE A                                                                       B=B-20 READ B                                                                      WRITE B B=B+10                                                                        READ C WRITE B                                                                        C=C+20                                                                        WRITE C         Рис.3.9. Расписания транзакций

Отметим, что в последнем случае величина  B увеличивается, а не уменьшается на 10 в силу того, что Т1 читает В прежде, чем Т2 записывает новые уменьшенные значения В. Предотвратить это сложно.  

В случае, когда допускаются произвольные операции с элементами невозможно проверить, дают ли два расписания одинаковый результат при всех начальных значениях элементов. На практике делаются некоторые упрощающие предположения относительно операций, выполняемых над элементами. Удобно предположить, в частности, что одинаковые их значения можно получить только при одной и той же последовательности операций. Поэтому нельзя считать, что (А+10)-20 и (А+20)-30 продуцируют одни и те же значения. Игнорируя алгебраические свойства арифметики, мы совершаем лишь «нефатальные» ошибки. Но зато расписание никогда не рассматривается как сериализуемое, если оно не является таким («фатальная» ошибка).         Нефатальные ошибки могут исключить некоторые параллельные операции и тем самым сделать систему более медленной. Однако в отличие от фатальных ошибок, при этом никогда не могут быть получены некорректные результаты.

Протоколы и расписания

Как было показано выше, произвольные транзакции при их параллельном исполнении могут приводить к бесконечному ожиданию, тупиковым ситуациям и несериализуемому расписанию.   Для исключения подобных ситуаций имеются два инструмента. ·    1-й планировщик - часть системы базы данных, которая служит арбитром между конфликтующими запросами. Планировщик может основываться на стратегии "первым вошёл - первым обслуживается" исключения бесконечного ожидания. Планировщик может также справляться с тупиками и несериализуемостью при помощи рестарта одной или более транзакций.

·  2-й подход – использование протоколов. Протокол представляет собой введение ограничений на последовательность шагов, которые может выполнять транзакция. Например, протоколом является исключающая тупики стратегия запрашивания блокировок элементов в некотором фиксированном порядке.