9.5. Захват и освобождение объекта
Для обеспечения сериализации транзакций применяются методы «захвата» и «освобождения» объектов, производимого по инициативе транзакции: транзакция «захватывает» объект, что приводит к его блокировке для других транзакций, и освобождает его только при своем завершении. При этом захваты объектов несколькими транзакциями на чтение совместимы (т.е. нескольким транзакциям разрешается читать один и тот же объект), захват объекта одной транзакцией на чтение не совместим с захватом другой транзакцией того же объекта на запись, и захваты одного объекта разными транзакциями на запись не совместимы. Тем самым, выделяются два основных режима захватов:
- совместный режим - S (Shared), означающий разделяемый захват объекта и необходимый для выполнения операции чтения объекта;
- монопольный режим - X (eXclusive), означающий монопольный захват объекта и необходимый для выполнения операций записи, удаления и модификации.
Наиболее распространенным в СУБД, основанных на архитектуре «клиент-сервер», является подход, реализующий соблюдение двухфазного протокола захватов объектов БД. В общих чертах протокол состоит в том, что перед выполнением любой операции над объектом базы данных от имени транзакции запрашивается захват объекта в соответствующем режиме (в зависимости от вида операции – совместном или монопольном). В соответствии с этим протоколом выполнение транзакции разбивается на две фазы: первая фаза транзакции - накопление захватов; вторая фаза (фиксация или откат) - освобождение захватов.
При соблюдении двухфазного протокола основная проблема состоит в том, что следует считать объектом для захвата?
В контексте реляционных баз данных возможны следующие варианты:
- файл - физический (с точки зрения базы данных) объект, область хранения нескольких отношений и, возможно, индексов;
- таблица - логический объект, соответствующий множеству записей данного отношения;
- страница данных - физический объект, хранящий записи одного или нескольких отношений, индексную или служебную информацию;
- запись - элементарный физический объект базы данных.
Очевидно, что чем крупнее объект захвата, тем меньше захватов будет поддерживаться в системе, и на это, соответственно, будут тратиться меньшие накладные расходы. Более того, если выбрать в качестве уровня объектов для захватов файл или отношение, то будет решена даже проблема строк-призраков. Однако, при использовании для захватов крупных объектов возрастает вероятность конфликтов транзакций и тем самым уменьшается допускаемая степень их параллельного выполнения. Фактически, при укрупнении объекта синхронизационного захвата мы умышленно огрубляем ситуацию и видим конфликты в тех ситуациях, когда на самом деле конфликтов нет.
Таким образом, можно резюмировать, что транзакция – это законченный блок обращений к базе данных и некоторых действий над ней, для которого гарантируется выполнение четырех условий, так называемых свойств ACID (Atomicity, Consistency, Isolation, Durability).
- Атомарность – операции транзакции образуют неразделимый атомарный блок с определенным началом и концом. Этот блок либо выполняется от начала до конца, либо не выполняется вообще. Если в процессе выполнения транзакции произошел сбой, происходит откат к исходному состоянию.
- Согласованность – по завершении транзакции все задействованные объекты находятся в согласованном состоянии.
- Изолированность – одновременный доступ транзакций различных приложений к разделяемым объектам координируется таким образом, чтобы эти транзакции не влияли друг на друга.
- Долговременность – все изменения данных, осуществленные в процессе выполнения транзакции, не могут быть потеряны.
Контрольные вопросы
1. Дайте определение транзакции
2. Охарактеризуйте модели автоматического и управляемого выполнения транзакций.
3. Назовите виды конфликтов при параллельном выполнении транзакций.
4. Что такое сериализация транзакций?
5. Охарактеризуйте методы «захвата» и «освобождения» объектов.
6. Назовите основные режимы «захвата» объектов.
7. Что такое журнал транзакций?
8. Перечислите основные сервисные программные средства восстановления базы данных в составе СУБД.
Назад к разделу "9.4. Сериализация транзакций"
Вперед к разделу "Глава 10. Управление базами данных в СУБД"