
- •Глава 9. Транзакции и целостность бд
- •9.1. Модели транзакций
- •9.2. Журнал транзакций
- •9.3. Параллельное выполнение транзакций
- •9.3.1. Пропавшие обновления
- •9.3.2. Чтение «грязных» данных
- •9.3.3. Чтение несогласованных данных
- •9.3.4. Строки-призраки
- •9.4. Сериализация транзакций
- •9.5. Захват и освобождение объекта
9.5. Захват и освобождение объекта
Для обеспечения сериализации транзакций применяются методы «захвата» и «освобождения» объектов, производимого по инициативе транзакции: транзакция «захватывает» объект, что приводит к его блокировке для других транзакций, и освобождает его только при своем завершении. При этом захваты объектов несколькими транзакциями на чтение совместимы (т. е. нескольким транзакциям разрешается читать один и тот же объект), захват объекта одной транзакцией на чтение не совместим с захватом другой транзакцией того же объекта на запись, и захваты одного объекта разными транзакциями на запись не совместимы. Тем самым, выделяются два основных режима захватов:
совместный режим — S (Shared), означающий разделяемый захват объекта и необходимый для выполнения операции чтения объекта;
монопольный режим — X (EXlusive) означающий монопольный захват объекта и необходимый для выполнения операций записи, удаления и модификации.
Наиболее распространенным в СУБД, основанных на архитектуре «клиент-сервер», является подход, реализующий соблюдение двухфазного протокола захватов объектов БД. В общих чертах протокол состоит в том, что перед выполнением любой операции над объектом базы данных от имени транзакции запрашивается захват объекта в соответствующем режиме (в зависимости от вида операции — совместном или монопольном). В соответствии с этим протоколом выполнение транзакции разбивается на две фазы - первая фаза транзакции — накопление захватов; вторая фаза (фиксация или откат) — освобождение захватов.
При соблюдении двухфазного протокола основная проблема состоит в том, что следует считать объектом для захвата?
В контексте реляционных баз данных возможны следующие варианты:
файл — физический (с точки зрения базы данных) объект область хранения нескольких отношений и, возможно, индексов;
таблица — логический объект, соответствующий множеству записей данного отношения;
страница данных — физический объект, хранящий записи одного или нескольких отношений, индексную или служебную информацию;
запись — элементарный физический объект базы данных.
Очевидно, что чем крупнее объект захвата, тем меньше захватов будет поддерживаться в системе, и на это, соответственно, будут тратиться меньшие накладные расходы. Более того, если выбрать в качестве уровня объектов для захватов файл или отношение, то будет решена даже проблема строк-призраков. Однако при использовании для захватов крупных объектов возрастает вероятность конфликтов транзакций и тем самым уменьшается допускаемая степень их параллельного выполнения. Фактически, при укрупнении объекта синхронизационного захвата мы умышленно огрубляем ситуацию и видим конфликты в тех ситуациях, когда на самом деле конфликтов нет.
Таким образом, можно резюмировать, что транзакция — это законченный блок обращений к базе данных и некоторых действии над ней, для которого гарантируется выполнение четырех условии, так называемых свойств ACID (Atomicity, Consistency, Isolation, Durability):
атомарность — операции транзакции образуют неразделимы атомарный блок с определенным началом и концом. Этот блок либо выполняется от начала до конца, либо не выполняется вообще. Если в процессе выполнения транзакции произошел сбой, происходит откат к исходному состоянию;
согласованность — по завершении транзакции все задействованные объекты находятся в согласованном состоянии:
изолированность — одновременный доступ транзакций различных приложений к разделяемым объектам координируется таким образом, чтобы эти транзакции не влияли друг на друга;
долговременность — все изменения данных, осуществленные в процессе выполнения транзакции, не могут быть потеряны.
Контрольные вопросы и задания
Дайте определение транзакции.
Охарактеризуйте модели автоматического и управляемого выполнения транзакций.
Назовите виды конфликтов при параллельном выполнении транзакций.
Что такое сериализация транзакций?
Охарактеризуйте методы «захвата» и «освобождения» объектов.
Назовите основные режимы «захвата» объектов.
Что такое журнал транзакций?
Перечислите основные сервисные программные средства восстановления базы данных в составе СУБД.