Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД (Лазицкас Екатерина Александровна).docx
Скачиваний:
30
Добавлен:
25.02.2016
Размер:
104.02 Кб
Скачать

Управление транзакциями

Поддержание механизма транзакции– показатель развитости СУБД. Корректное поддержание транзакции одновременно является основой обеспечения целостности БД, а также составляет базис изолированности пользователей в многопользовательских СУБД.

Транзакция– неделимая, с точки зрения воздействия на БД, совокупность операторов манипулирования данными такая, что либо результаты всех операторов, входящих в транзакцию, отображаются в БД, либо воздействие всех операторов полностью отсутствует.

При завершении операции оператором COMMITрезультаты фиксируются во внешней памяти. При завершении операторомROLLBACK– гарантировано отсутствуют во внешней памяти.

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

Различают 2 вида ограничения целостности:

1 – немедленно проверяемоеограничение – ограничения, нарушения которых нет необходимости откладывать;

2 – откладываемое ограничение– ограничения, которые проверяются в конце транзакции.

Изолированность пользователей

В многопользовательских системах с одной БД могут работать несколько пользователей или прикладных программ. Предельной задачей системы является обеспечение изолированности пользователей, т.е. создание достоверной и надежной иллюзией того, что каждый пользователь работает с БД в одиночку. В связи со свойством сохранения целостности БД транзакция является подходящей единицей изолированности пользователей.

Выделяют следующие уровни изолированности транзакций:

1 – отсутствие потерянных изменений– транзакция 1 изменяет объект БДA. До завершения транзакции 1 транзакция 2 также изменяет объект. Транзакция 2 завершается операторомROLLBACK. Тогда при повторном чтении объектаAтранзакция 1 не видит изменений этого объекта измененных ранее. Такая ситуация -ситуация потерянных изменений. Отсюда следует, что транзакции 1 требуется, чтобы до завершения транзакции 1 ни одна транзакция не могла изменить объектA(минимальные требования к СУБД).

2 – отсутствие чтения грязных данных– транзакция 1 изменяет объект БДA. Параллельно с этим транзакция 2 читает объектA. Поскольку транзакция 1 еще не завершена, транзакция 2 видит несогласованные, грязные, данные. Отсюда следует, что до завершения транзакции 1 ни одна транзакция не должна читать объектA.

3 – отсутствие неповторяющихся чтений– транзакция 1 читает объект БДA. До завершения транзакция 2 изменяет объект БДAи успешно завершается операторомCOMMIT. Транзакция 1 повторно читает объектAи видит его измененное состояние. Отсюда следует, что пока транзакция 1 читает объект, ни одна другая не должна изменять его.

4 – кортежи-фантомы– транзакция 1 выполняет операторAв выборке кортежей отношенияR. До её завершения транзакция 2 вставляет в отношениеRновый кортеж, удовлетворяющий условию, и успешно завершается. Транзакция 1 повторно выполняет операторAи в результате видит кортеж, который отсутствовал при первом выполнении оператора.

Сериализация транзакций

Для того, чтобы добиться изолированности транзакций в СУБД должны использоваться механизмы, регулирующие совместное выполнение транзакций.

Сериальный способ- план (способ) выполнения набора транзакций, когда результат выполнения транзакции эквивалентен результату последовательного выполнения этих же транзакций.

Сериализация транзакций– это механизм их выполнения по некоторому сериальному плану, который не слишком бы ограничивал их параллельность.

Между транзакциями могут существовать следующие виды конфликтов:

1 – транзакция 2 пытается изменить объект, изменяемый не закончившейся транзакцией 1

2 – транзакция 2 пытается изменить объект, прочитанный не закончившейся транзакцией 1

3 – транзакция 2 пытается читать объект, изменяемый не закончившейся транзакцией 1

Методы сериализации транзакций:

1 – подход,основанный на синхронизационных захватах объектов БД

2 - подход, основанный на использовании временных меток

Обнаруживают конфликты и устраняют их.

Наиболее распространенным в централизованных СУБД является подход, основанный на соблюдении двухфазного протокола синхронизационных захватов объектов БД. Протокол состоит в том, что перед выполнением любой операции в транзакцииTнад объектом БДRот имени транзакцииTзапрашивается синхронизационный захват объектаRв соответствующем режиме.

Режимы захвата:

1 – совместный режим– разделяемый захват объекта, требуемый для операции чтения;

2 – монопольный режим– монопольный захват объекта и требуемый для операций вставки, удаления, модификации.

Захваты объектов несколькими транзакциями по чтению совместимы, т.е. нескольким транзакциям допускается читать один и тот же объект. Все остальные операции являются несовместимыми.

Для обеспечения сериализации транзакций синхронизационные захваты объектов, произведенные по инициативе транзакций, можно снимать только при её завершении. Это требует двухфазный протокол. В соответствии с этим протоколом выполнение разбивается на две фазы:

1 – накопление;

2 – освобождение.

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

Граф ожидания транзакций– ориентированный двудольный граф, в котором существуют 2 вида вершин:вершины, соответствующие транзакциям и вершины, соответствующие объектам захвата.Также существует дуга от вершины транзакции к вершине объекта, если для этой транзакции существует удовлетворенный захват объекта. Также существует дуга из вершины объекта к вершине транзакции, если транзакция ожидает удовлетворение захвата объекта.

Если в графе ожидания транзакции существует хотя бы 1 цикл, то существует возможность тупика.

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

Существует, альтернативны метод, хорошо работающий в условии редких конфликтов, не требующий построения графа ожидания – метод временных меток. Основная идея:

Если Т1 началась раньше Т2, то система обеспечивает такой режим выполнения, как если бы Т1 была бы полностью закончена до начала Т2. Для каждой Т предписывает временная метка t, соответствующая времени начала транзакции. При выполнении Т над объектомR, Т помечает его своей временной меткой и типом операции.

Перед выполнением операции над объектом RТ1 выполняет следующее:

1 – проверяет, не закончилась ли Т, пометившая этот объект. Если закончилась, Т1 помечает объект Rи выполняет свою операцию.

2 – если Т не завершилась, то Т1 проверяет конфликтность операций. Если операции неконфликтны, при объекте Rостается метка с меньшим значением и Т1 выполняет свою операцию.

3 – если Т1 и Т конфликтуют, то если t(Т) >t(T1) производится откат Т и Т1 продолжает работу.

4 – если t(T)<t(T1), то Т1 получает новую временную метку и начинается заново.

Недостатки:более частые откаты транзакций, в отличие от синхронизационных захватов.