Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД.docx
Скачиваний:
3
Добавлен:
07.09.2019
Размер:
45.51 Кб
Скачать

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

Во многопользовательских системах с одной БД может работать несколько пользователей или прикладных программ. Предельной задачей системы является обеспечение изолированности пользователей, т. е. создание надежной и достоверной иллюзии того, что каждый пользователь работает с БД в одиночку. В связи со свойством сохранения целостности БД, транзакции являются подходящими единицами изолированности пользователей. Если с каждым сеансом работы с БД ассоциируется транзакция, то каждый пользователь начинает работу с согласованным состоянием БД, т. е. таким состоянием, в котором БД могла бы находиться даже, если бы пользователь работал с ней в одиночку. При соблюдении обязательного требования поддержания целостности БД возможны следующие уровни изолированности транзакции: 1) отсутствие потерянных изменений (транзакция 1 изменяет объект БД А. До завершения транзакции 1, транзакция 2 также изменяет объект А. Транзакция 2 завершается оператором Rollback. Тогда при повторном чтении объекта А транзакция 1 не видит изменений этого объекта произведенных ранее. Чтобы избежать такой ситуации в транзакции 1 требуется, чтобы до завершения транзакции 1 никакая другая транзакция не могла изменять объект А. Отсутствие потерянных изменений является минимальным требованием к СУБД по части синхронизации параллельно выполняемых транзакций.);

  1. Отсутствие чтения грязных данных (транзакция 1 изменяет объект БД А. Параллельно с этим транзакция 2 читает объект А. Поскольку операция изменения еще не завершена, транзакция 2 видит несогласованные, «грязные» данные. Чтобы избежать такой ситуации: до завершения транзакции 1 никакая другая транзакция не должна читать объект А.);

  2. Отсутствие неповторяющихся чтений (транзакция 1 читает объект БД А. До завершения транзакции 1 транзакция 2 изменяет объект А и успешно завершается оператом Commit. Транзакция 1 повторно читает объект А и видит его измененное состояние. Чтобы избежать неповторяющихся чтений до завершения транзакции 1 никакая другая транзакция не должна изменять объект.)

  3. Кортежи-фантомы (транзакция 1 выполняет оператор F выборки кортежей отношения R, удовлетворяющих условию до завершения транзакции 1 транзакция 2 вставляет в отношение R новый кортеж, удовлетворяющий условиям и успешно завершается. Транзакция 1 повторно выполянет оператор F и в результате появляется кортеж, который отсутствовал при первом выполнении оператора. Чтобы избежать появления кортежей-фантомов требуется более высокий логический уровень синхронизации транзакций.)

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

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

3) Транзакция 2 пытается читать объект, измененный не закончившейся транзакцией 1. Практические методы сериализации транзакций основываются на учете этих конфликтов. Существуют два базовых подхода к сериализации транзакций: 1) Основанный на синхронизационных захватах объектов БД. 2) Основанный на использовании временных меток. Суть обоих подходов состоит в обнаружении конфликтов транзакций и их устранении. Наиболее распространенным в централизованных СУБД является подход, основанный на соблюдении двухфазного протокола синхронизационных захватов объектов БД. Суть протокола состоит в том: перед выполнением любой операции транзакция запрашивает синхронизационный захват объекта БД в соответствующем режиме. Выделяют два вида режима: 1) Совместный режим – разделяемый захват объекта для выполнения операции чтения. 2) Монопольный режим – заключается в монопольном захвате объекта и требуемый для выполнения операции вставки, удаления, изменения.

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