Транзакции

Автор: Пользователь скрыл имя, 29 Августа 2012 в 21:56, курсовая работа

Описание работы

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

Содержание

Введение 3
1 Основы обработки транзакций 5
1.1 Свойства транзакций 5
1.2 Управление транзакциями 7
1.3 Параллельное выполнение транзакций 9
2 Принципы и модели обработки транзакций 12
2.1 Плоские транзакции 12
2.2 Режим блокировки 14
2.3 Реализация транзакций 17
3 Классификация систем обработки транзакций 20
3.1 Описание принципа обработки транзакций 20
3.2 Языки транзакций 21
3.3 Экстремальная обработка транзакций 23
Заключение 25
Глоссарий 27
Список использованных источников 29
Приложения 30

Работа содержит 1 файл

ШаблонТранзакции.doc

— 216.00 Кб (Скачать)

     SQL Server поддерживает три вида определения  транзакций:

     - явное;

     - автоматическое;

     - подразумеваемое.

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

     Когда пользователю понадобится создать  транзакцию, включающую несколько команд, он должен явно указать транзакцию.

     Сервер  работает только в одном из двух режимов определения транзакций: автоматическом или подразумевающемся. Он не может находиться в режиме исключительно явного определения транзакций. Этот режим работает поверх двух других. 

     1.3 Параллельное выполнение транзакций

 

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

     Основные  проблемы, которые возникают при  параллельном выполнении транзакций, делятся условно на 4 типа:

  • Пропавшие изменения.
  • Проблемы промежуточных данных.
  • Проблемы несогласованных данных.
  • Проблемы строк-призраков (строк-фантомов).

     Требуется выработать некоторую процедуру  согласованного выполнения параллельных транзакций. Эта процедура должна удовлетворять следующим правилам:

     В ходе выполнения транзакции пользователь видит только согласованные данные. Пользователь не должен видеть несогласованных промежуточных данных.

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

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

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

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

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

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

     Одним из способов (не единственным) обеспечить независимую параллельную работу нескольких транзакций является метод блокировок (см. приложение 1).

       
 
 
 
 

     2  Принципы и модели  обработки транзакций

     2.1  Плоские транзакции

 

     Транзакция  обладает четырьмя важными свойствами, известными как свойства ACID:

  • (Atomicity) Атомарность. Транзакция выполняется как атомарная операция - либо выполняется вся транзакция целиком, либо она целиком не выполняется. Требование атомарности транзакций утверждает, что не законченные или откатившиеся транзакции не должны оставлять следов в базе данных. Это означает, что данные должны храниться в базе данных с избыточностью, позволяющей иметь информацию, по которой восстанавливается состояние базы данных на момент начала неудачной транзакции. Такую избыточность обычно обеспечивает журнал транзакций3 (см. приложение 2).
  • (Consistency) Согласованность. Транзакция переводит базу данных из одного согласованного (целостного) состояния в другое согласованное (целостное) состояние. Внутри транзакции согласованность базы данных может нарушаться.
  • (Isolation) Изоляция. Транзакции разных пользователей не должны мешать друг другу (например, как если бы они выполнялись строго по очереди).
  • (Durability) Долговечность. Если транзакция выполнена, то результаты ее работы должны сохраниться в базе данных, даже если в следующий момент произойдет сбой системы.

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

  • Подана команда COMMIT WORK (зафиксировать транзакцию).
  • Подана команда ROLLBACK WORK (откатить транзакцию).
  • Произошло отсоединение пользователя от СУБД.
  • Произошел сбой системы.

     Команда COMMIT WORK завершает текущую транзакцию и автоматически начинает новую  транзакцию. При этом гарантируется, что результаты работы завершенной транзакции фиксируются, т.е. сохраняются в базе данных. Команда ROLLBACK WORK приводит к тому, что все изменения, сделанные текущей транзакцией откатываются, т.е. отменяются так, как будто их вообще не было. При этом автоматически начинается новая транзакция.

     При сбое системы происходят более сложные  процессы. Кратко суть их сводится к  тому, что при последующем запуске  системы происходит анализ выполнявшихся  до момента сбоя транзакций. Те транзакции, для которых была подана команда COMMIT WORK, но результаты работы которых не были занесены в базу данных выполняются снова (накатываются). Те транзакции, для которых не была подана команда COMMIT WORK, откатываются4.

     При отсоединении пользователя от СУБД происходит автоматическая фиксация транзакций.

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

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

     Очевидно, что в наш век сильно распределенных вычислений необходимо каким-то образом  проводить декомпозицию плоских транзакций. Модификация модели плоских транзакций, сохраняющая свойство атомарности, но снижающая потребность в повторном выполнении действий (т. е. в "переработках"), включает понятие контрольных точек, которое мы обсудим в следующем разделе.

     2.2 Режим блокировки

 

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

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

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

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

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

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

     - транзакция, результатом действия  которой на строку данных в  таблице является ее извлечение, обязана наложить блокировку чтения на эту строку;

     - транзакция, предназначенная для  модификации строки данных, накладывает  на нее блокировку записи;

     - если запрашиваемая блокировка  на строку отвергается из-за  уже имеющейся блокировки, то  транзакция переводится в режим ожидания до тех пор, пока блокировка не будет снята;

     - блокировка записи сохраняется  вплоть до конца выполнения  транзакции.

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

     Если  в системе управления базами данных не реализованы механизмы блокирования, то при одновременном чтении и изменении одних и тех же данных несколькими пользователями могут возникнуть следующие проблемы одновременного доступа:

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

     - проблема "грязного" чтения возможна  в том случае, если пользователь  выполняет сложные операции обработки  данных, требующие множественного  изменения данных перед тем,  как они обретут логически  верное состояние. Если во время  изменения данных другой пользователь будет считывать их, то может оказаться, что он получит логически неверную информацию. Для исключения подобных проблем необходимо производить считывание данных после окончания всех изменений;

     - проблема неповторяемого чтения  является следствием неоднократного считывания транзакцией одних и тех же данных. Во время выполнения первой транзакции другая может внести в данные изменения, поэтому при повторном чтении первая транзакция получит уже иной набор данных, что приводит к нарушению их целостности или логической несогласованности;

     - проблема чтения фантомов появляется  после того, как одна транзакция  выбирает данные из таблицы,  а другая вставляет или удаляет  строки до завершения первой. Выбранные из таблицы значения  будут некорректны.

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

Информация о работе Транзакции