Введение в системы БД (542480), страница 143
Текст из файла (страница 143)
Управление транзакциями транзакций и т.д.); объема вычислений, выполняемых во время перезагрузки/восстановления; степени параллельности вычислений, выполняемых во время перезагрузки/восстановления; уровня откатов транзакций, вызванных ситуациями взаимной блокировки в системе; ограничений, накладываемых на хранимые данные (например, требований уникальности ключей для всех записей, ограничений максимального размера объектов до размера страницы и т.д.); способности поддерживать новые режимы блокировки, в которых допускается параллельное выполнение (на основе коммутативности и других свойств) таких операций, как инкремент/декремент для тех же данных, но разными транзакциями и т.д. По этим критериям [АИЕЯ) оценивается очень высоко".
Со времени создания метода АИЕЯ появилось множество его усовершенствований, разработано и описано в литературе несколько специализированных версий: АК1ЕЯ/СЯ (для систем с архитектурой "клиент/сервер"), АК!ЕЯ/)М (для обработки индексов) и АК1ЕЯ/Ь)Т (для вложенных транзакций) и т.д. Ответы к некоторым упражнениям 14.1 14.2 ВЕ61И ТКАИЯАСТ10И (транзакция В) транзакция В обновляет кортеж Ь ; СОММ1Т (траизакция В) КОЕЕВАСК (траизакция А) Если кортеж Ь восстанавливается до своего предыдушего значения (назовем его рте-А), то фиксация (СОММ1Т) транзакции В, по сути, не происходит полностью. Однако если фиксация (СОММ1Т) транзакции В была истинной, то кортеж Ь не может быть восстановлен до своего значения рте-А и, следовательно, откат (КОЕЕВАСК) транзакции А не может быть успешным.
Требование того, чтобы транзакции не могли вкладываться одна в другую, означа- ет возможность выполнения команды ВЕ61И ТКАИЯАСТ10И только в том случае, ес- ли не выполняются никакие транзакции. Однако многие авторы (начиная с Дэвиса [14.71) прелложили реализовать воз- можность вложения транзакций за счет отмены требования долговечности (свойство "0" в АСП)-свойствах) по отношению к части внутренней транзак- 563 Глава 14. Восстановление Подобные действия будут противоречить понятию "атомарность транзакции".
Если бы транзакция зафиксировала некоторые, не все свои, обновления, то незафиксированные обновления можно было бы впоследствии аннулировкть, в то время как зафиксированные, конечно же, отменить было бы уже невозможно. Таким образом, для транзакции не будет выполнено условие атомарности, требуюшее "выполнить все или ничего". Подобное решение будет противоречить понятию "атомарность транзакции'*.
Предположим, что транзакция В была вложена в транзакцию А. Тогда последовательность событий будет такой (для простоты предположим, что имеет смысл говорить об "обновлении кортежа"). ВЕ61И ТКАИЯАСТ10И (траизакция А) 1 ции. Это означает, что фиксация (СОММ1Т), выполняемая внутренней транзакцией, приведет к фиксации обновлений этой транзакции, но только до следующего внешнего уровня. Если же этот внешний уровень завершается откатом выполненных действий, внутренняя транзакция также завершается откатом.
В данном примере операция СОММ1Т лля транзакции В зафиксировала бы обновления до окончания транзакции А, но не для внешнего мира и впоследствии действительно могла бы быть отменена. Полезно будет детальнее рассмотреть упомянутые выше идеи. Вложенные транзакции можно рассматривать как обобщение понятия точек сохранения [14.11]. Точки сохранения позволяют организовать транзакции в виде последовательности действий (а потому откат можно выполнить в любой момент до начала любого другого предыдущего действия в этой последовательности), а вложенность, наоборот, позволяет организовать транзакции в виде иерархии таких действий (рис.
14.4). Иначе говоря: ° команда ВЕО1М ТВАМЯАСТТОМ расширяется для поддержки подчиненных транзакций (т.е. если команда ВЕЯ1М ТВАМЯАСТ1ОМ стартует тогда, когда выполняется какая-то транзакция, запускается дочериял транзакция); ° команда СОММ1Т фиксирует выполнение транзакции, но только в пределах родительской области видимости (если транзакция является дочерней); ° команда ЕОЬЬВАСК отменяет выполненную работу, но только до начала этой отдельной транзакции (включая дочерние транзакции, дочерние транзакции этих дочерних транзакций и т.д., но ие родительскую транзакцию). Отметим, что вложенные транзакции в языках, подобных языку ЯОЬ, весьма не- рис 14 4 Пример построения вложен- удобны для воплошения (с синтаксиче- вой траизакиии ской точки зрения), так как в них имеется один серьезный недостаток — отсутствие явного оператора ВЕ61М ТЕАМЯАСТ10М (необходим некоторый явный способ определения начала внутренней транзакции или точки фиксации для отката, если эта внутренняя транзакция потерпела неудачу).
14.4. а) В случае отказа системы никогда не потребуется выполнять операции ВЕОО. б) Физическая операция ОМОО никогда не будет необходимой. Следовательно, поме- шать в журнал регистрации сведения об операциях ОМОО также необязательно. Это упражнение является типичным примером широкого класса приложений, для которых обычно применяется следующее решение. 14.6. ЕХЕС ЯОЬ ОЕСЬАЕЕ СР СОЕВОМ РОЕ ЯЕЬЕСТ Р.Р4, Р.МАМЕ, Р.СОЬОЕ, РЛЕ1ОНТ, Р.С1ТТ 564 Часть 1'г'. Управление транзакиияли РЕОМ ИНЕЕЕ Р.Р$ > ргеч1опв РЕ ОНОЕЕ ВУ Р$ ргеч1опв РР := ' еоЕ := Та1ве ; ОО ИН1ЬЕ ( еоТ = Та1ве ) ЕХЕС ЯОЬ ОРЕМ СР ОО поппе 3= 1 ТО 10 3 ЕХЕС ЯОЬ ГЕТСН СР 1ИТО :РФ, 1Г ЯОЬЯТйТЕ = '02000' ТНЕИ ОО; ЕХЕС ЯОЬ СЬОЯЕ СР ЕХЕС ЯОЬ СОММТТ ) еоТ := Егпе ) ЕИО ВО у ЕЬЯЕ рг1пб Р$, ЕМО 1Р; ЕМО ОО ; ЕХЕС ЯЦЬ ОЕЬЕТЕ ГНОМ Р ИНЕВЕ Р.Р$ = :РФ ЕХЕС ЯОЬ СЬОЯЕ СР ЕХЕС ЯОЬ СОММТТ ) ргеч1опв РР := РЕ ; ЕИО ОО ; Обратите внимание на то, что информация о позиционировании в таблице деталей Р утрачивается в конце каждой транзакции (даже если не закрывать явным образом курсор СР, оператор СОММ1Т закроет его автоматически).
Поэтому приведенный код не будет особенно эффективным в связи с тем, что для каждой новой транзакции потребуется выполнить поиск в таблице деталей для возврата к прежней позиции. Ситуацию можно немного поправить, если использовать индекс по столбцу РР (что обычно происходит на практике, так как (РР) является первичным ключом) и оптимизатор выберет этот индекс в качестве пути доступа к данной таблице. Глава 14. Восстановление 565 глава 15 Параллельность 15.1.
Введение Как разъяснялось во введении к главе 14, восстановление данных и параллельное выполнение операций следует рассматривать совместно, поскольку обе эти темы являются частями более общей темы, связанной с обработкой транзакций. Однако в этой главе основное внимание уделяется именно вопросам параллельности.
Термин параллельность означает поддержку СУБД одновременной обработки многих транзакций, получающих доступ к одним и тем же данным, причем в одно и то же время. Как известно„ для корректной обработки параллельно выполняющихся транзакций без возникновения конфликтных ситуаций в любой системе необходимо использовать некоторый механизм управления параллельностью. Ниже, в разделе !5.2, приведены примеры конфликтных ситуаций, возникновение которых возможно при отсутствии соответствующего механизма управления параллельностью. данная глава имеет слелуюшую структуру ° Как уже говорилось, в разделе!5.2 рассматриваются проблемы, которые могут иметь место при отсутствии должного механизма управления параллельностью. ° В разделе 15.3 предлагается стандартный метод разрешения таких проблем, получивший название метод блокировки.
Заиечание. Блокировка не является единственно возможным подходом к решению проблемы управления параллельностью, однако именно этот метод чаще всего используется на практике, Некоторые другие подходы описаны в комментариях, приведенных в списке литературы [15.1], [15.3], [15.6), [! 5.7], [15.! 4], [15.15]. ° В разделе 15.4 поясняется, как можно использовать механизм блокировки для решения проблем, обсуждавшихся в разделе 15.2. ° К сожалению, использование метода блокировки связано с возникновением других проблем, самой известной из которых является ситуация взаимной блокировки, описываемая в разделе 15.5. ° В разделе 15.6 рассматривается концепция упорядочиваемости, представляющая собой некоторый формальный критерий правильности выполнения определенного набора параллельно выполняемых транзакций.
° В разделах 15.7 и 15.8 продолжается рассмотрение некоторых важных дополнений к основной идее блокировки, а именно — концепций уровней изоляции и механизма блокировки намерения. ° В разделе ! 5.9 описываются соответствующие средства языка Б! !1.. ° В разделе 15.10 дается краткое резюме и несколько заключительных замечаний к материалу данной главы. 566 Часть 1К Управление транзакз)иями Заиечание. Здесь также будет уместно еще раз привести общие замечания, которые были сделаны во введении к главе 14.
° Во-первых, идеи управления параллельностью, как и идеи восстановления данных, в значительной степени не зависят от того, какой является СУБД: реляционной или какой-либо другой. Однако большая часть теоретической работы в этой области, как и в области восстановления данных, была выполнена именно в реляционном контексте, исходя из соображений "определенности" [15.5). ° Во-вторых, управление параллельностью, как и восстановление данных, является весьма обширной темой, а потому в этой главе будут описаны только наиболее важные идеи. Обсуждение некоторых последних достижений в этой области знаний содержится в упражнениях и в ответах к ним, а также в списке литературы в конце главы. 15.2.