17243

Понятие транзакции

Лекция

Информатика, кибернетика и программирование

Лекция №7 Понятие транзакции Определение. Транзакция это последовательность операторов манипулирования данными выполняющаяся как единое целое все или ничего и переводящая базу данных из одного целостного состояния в другое целостное состояние. Транзакция об...

Русский

2013-06-30

163 KB

5 чел.

Лекция №7

Понятие транзакции

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

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

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

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

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

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

Команда ROLLBACK TRANSACTION приводит к тому, что все изменения, сделанные текущей транзакцией откатываются, т.е. отменяются так, как будто их вообще не было. Откат до заданной точки осуществляется командой ROLLBACK TRANSACTION <имя>. При этом автоматически начинается новая транзакция.

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

Для явной фиксации транзакции в некоторых системах (например, Visual FoxPro, MS SQL Server и др.), требуют начинать транзакцию командой BEGIN TRANSACTION.

Для установления промежуточных точек позволяющих осуществлять откат внутри транзакции используется команда SAVE TRANSACTION <имя>.

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

Одним из способов поддержки транзакций является ведение журнала. Журнал транзакций — это структура данных, в которой хранятся записи о планирующихся и выполненных операциях. Работа с ним состоит из трёх шагов:

  1.  Записать намерение произвести некоторые операции
  2.  Запись о выполнении задания
  3.  Записать об отсутствии ошибок

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

  1.  Если повреждена запись, то сбой произошёл во время проставления отметки в журнале. Значит, записи на диск нет (возврат к прежнему состоянию БД при повторной загрузки БД), и потери отсутствуют.
  2.  Если все записи отмечены как успешно выполненные, то сбой произошёл между транзакциями (данные успешно сохранены на диске), здесь также нет потерь.
  3.  Если в журнале есть незавершённая транзакция, то сбой произошёл во время записи на диск. В этом случае восстанавливается старая версия данных из сегмента отката (область, в которой хранится копия всех изменяемых в ходе транзакции данных).

Замечание. Каждая база данных SQL Server имеет как минимум два файла, с ней ассоциирующихся: один файл данных, в котором непосредственно хранятся данные и как минимум один файл журнала транзакций. Журнал транзакций это основной компонент СУБД. Все изменения в БД записываются в журнал транзакций. Используя эту информацию, СУБД может определить какая транзакция, и какие изменения были внесены.

Вложенные транзакции

Свойство Д (долговечность) также не является абсолютными свойством, т.к. некоторые системы допускают вложенные транзакции. Если транзакция Б запущена внутри транзакции А, и для транзакции Б выполнена команда COMMIT, то фиксация данных транзакции Б является условной, т.к. внешняя транзакция А может откатиться. Результаты работы внутренней транзакции Б будут окончательно зафиксированы только если будет зафиксирована внешняя транзакция А.

Вложенными называются транзакции, выполнение которых инициируется из тела уже активной транзакции.

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

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

Каждая команда COMMIT работает только с последней начатой транзакцией. При завершении вложенной транзакции команда COMMIT применяется к наиболее "глубокой" вложенной транзакции. Даже если в команде COMMIT указано имя транзакции более высокого уровня, будет завершена транзакция, начатая последней.

Если команда ROLLBACK TRANSACTION используется на любом уровне вложенности без указания имени транзакции, то откатываются все вложенные транзакции, включая транзакцию самого высокого (верхнего) уровня. В команде ROLLBACK TRANSACTION <имя> разрешается указывать только имя самой верхней транзакции. Имена любых вложенных транзакций игнорируются, и попытка их указания приведет к ошибке. Таким образом, при откате транзакции любого уровня вложенности всегда происходит откат всех транзакций. Если же требуется откатить лишь часть транзакций, можно использовать команду SAVE TRANSACTION <имя>, с помощью которой создается точка сохранения.

Пример. Вложенные транзакции.

BEGIN TRAN

INSERT Товар (Название, остаток)

VALUES ('v',40)

  BEGIN TRAN

  INSERT Товар (Название, остаток)

  VALUES ('n',50)

  BEGIN TRAN

   INSERT Товар (Название, остаток)

   VALUES ('m',60)

ROLLBACK TRAN

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

Параллельная работа транзакций

Свойство И (изоляция) также не всегда выполняется в полном объеме. В идеале, транзакции разных пользователей не должны мешать друг другу (т.е. они должны выполняться так, чтобы у пользователя создавалась иллюзия, что он в системе один).

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

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

Работа транзакций в смеси

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

  1.  Эта операция будет выполнена целиком или не выполнена вовсе (атомарность - все или ничего).
  2.  Во время выполнения этой операции не выполняются никакие другие операции других транзакций (строгая очередность элементарных операций).

Устно. Например, элементарными операциями транзакции будут считывание страницы данных с диска или запись страницы данных на диск (страница данных - это минимальная единица для дисковых операций СУБД). Условие 2 на самом деле является именно логическим условием, т.к. реально система может выполнять несколько различных элементарных операций в один и тот же момент. Например, данные могут храниться на нескольких физически различных дисках и операции чтения-записи на эти диски могут выполняться одновременно.

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

Например, если есть несколько транзакций, состоящих из последовательности операций элементарных:

, ,

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

.

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

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

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

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

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

Различают три основные проблемы параллелизма:

  1.  Проблема потери результатов обновления.
  2.  Проблема незафиксированной зависимости (чтение "грязных" данных).
  3.  Проблема несовместимого анализа данных.

Рассмотрим подробно эти проблемы.

Рассмотрим две транзакции, A и B, запускающиеся в соответствии с некоторыми графиками. Пусть транзакции работают с некоторыми строками таблицы.

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

1. Проблема потери результатов обновления

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

Две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения.

Время

Транзакция A

Транзакция B

Чтение

---

Запись

---

---

Чтение

---

Запись

COMMIT

---

---

COMMIT

 

Потеря результата обновления

 

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

2. Проблема незафиксированной зависимости (чтение "грязных" данных)

Транзакция B изменяет данные в строке. После этого транзакция A считывает измененные данные и работает с ними. Транзакция B откатывается и восстанавливает старые данные.

Время

Транзакция A

Транзакция B

---

Чтение

---

Запись

Чтение

---

Работа с прочитанными данными

---

---

Rollback tran

COMMIT

---

 

Работа с "грязными" данными

 

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

3. Проблема несовместимого анализа данных

Проблема несовместимого анализа включает несколько различных вариантов:

  1.  Неповторяемое считывание.
    1.  Фиктивные элементы (фантомы).
    2.  Несовместимый анализ данных.

3.1. Неповторяемое считывание

Транзакция A дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция B, которая изменяет значения в строке.

Время

Транзакция A

Транзакция B

Чтение

---

---

Чтение

---

Запись

---

COMMIT

Повторное чтение

---

COMMIT

---

 

Неповторяемое считывание

 

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

3.2. Фиктивные элементы (фантомы)

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

Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора.

Время

Транзакция A

Транзакция B

Выборка строк, удовлетворяющих условию .

WHERE  = TRUE

(Отобрано n строк)

---

---

Вставка новой строки, удовлетворяющей условию .

WHERE  = TRUE

---

COMMIT

Выборка строк, удовлетворяющих условию .

WHERE  = TRUE

(Отобрано n+1 строк)

---

COMMIT

---

 

Появились строки, которых раньше не было

 

Результат. Транзакция A не знает о существовании транзакции B, и, т.к. сама она не меняет ничего в базе данных, то ожидает, что после повторного отбора будут отобраны те же самые строки. Транзакция A в двух одинаковых выборках строк получила разные результаты.

3.3. Несовместимый анализ данных

Эффект несовместимого анализа также отличается от предыдущих примеров тем, что в смеси присутствуют две транзакции - одна длинная, другая короткая.

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

Время

Транзакция A

Транзакция B

Чтение счета и суммирование.

---

---

Снятие денег со счета

---

Помещение денег на счет .

---

COMMIT

Чтение счета и суммирование.

---

Чтение счета и суммирование.

---

COMMIT

---

 

Сумма 250у.е. по всем счетам неправильная - должно быть 300 у.е.

 

Результат. Хотя транзакция B все сделала правильно - деньги переведены без потери, но в результате транзакция A подсчитала неверную общую сумму.

Устно. Т.к. транзакции по переводу денег идут обычно непрерывно, то в данной ситуации следует ожидать, что никогда не будет известно, сколько же денег в банке.


 

А также другие работы, которые могут Вас заинтересовать

31875. Багатозначні слова. Пряме й переносне значення слова 36.5 KB
  Пряме й переносне значення слова Тести Варіант 1 1. Лексичне значення слова вивчає: а лексикографія; б лексикологія; в лексика; г лексема. Як називаються значення слова які виникають під впливом різних мовних ситуацій: а прямі; б гіперболічні; в похідні; г полісемічні.
31877. Техническое обоснование разработки компьютерной сети и анализ исходных данных 183 KB
  1 Техническое обоснование разработки компьютерной сети и анализ исходных данных Бухгалтерия и отдел кадров формирует комплексный бухгалтерский отчёт о деятельности предприятия полученной прибыли и произведённых затратах.2 – Распределение РС по комнатам и отделам Номер комнаты Площадь помещения м2 Наименование отдела Наименование пользователей в сети Количество РС шт Количество возможных РС шт 412 84 Главный бухгалтер GlvBuh 1 2 Продолжение таблицы 1.2 Номер комнаты Площадь помещения м2 Наименование отдела...
31878. ЭЛЕКТРОННЫЕ КЛЮЧИ 1.08 MB
  В качестве нелинейных приборов с управляемым сопротивлением в электронных ключах используются полупроводниковые диоды транзисторы фототранзисторы тиристоры оптроны электронные лампы.1 Диодные ключи Цель работы – исследование статических и динамических параметров и характеристик диодных ключей. На рис.1 а показаны типичные статические ВАХ германиевого Gе и кремниевого Si диодов а на рис.
31879. Определение чистоты лекарственных средств 464 KB
  Каково назначение определения удельного вращения в препаратах кислота аскорбиновая и кислота глютаминовая Приведите формулу для расчета удельного вращения в растворах. Для каких субстанций определяют прозрачность цветность раствора Какие нормативные документы регламентируют определение этих показателей Какими подходами пользуются при определении рН кислотности или щелочности Какие примеси и какими методами определяются согласно разделу блока чистоты Посторонние примеси. Промоделируйте определение прозрачности раствора в...
31880. Захист інформації в комп’ютерних системах 288.5 KB
  Огляд стандартних прав доступу в Windows 2000. Частина перша охоплює питання захисту інформації на рівні операційних систем і базових складових будьякої системи захисту – підсистем ідентифікації й автентифікації розмежування доступу і реєстрації подій. Теоретичні відомості Підсистема ідентифікації та автентифікації У системі Unix єдиними можливими суб'єктами доступу є користувачі идентифікуючою інформацією яких є login який іноді називають userid ім'яідентифікатор з одного слова а...
31881. Методы учета затрат и калькулирования себестоимости продукции на примере ОАО «Сибиряк» Русско-Полянского района 387 KB
  Сущность методов учета затрат и калькулирования себестоимости продукции. Роль калькулирования себестоимости продукции в управлении производством. Приложение А37 Приложение Б38 Приложение В39 Приложение Г40 ВВЕДЕНИЕ Процесс производства занимает центральное место в деятельности организации и представляет собой совокупность технологических операций связанных с созданием готовой...
31882. Электрический привод системы генератор-двигатель 1.05 MB
  Номер варианта Закон изменения момента сопротивления рабочей машины Момент инерции рабочей машины в долях от момента инерции двигателя Тип двигателя и способ его питания 4 1500 45 Постоянного тока от генератора постоянного тока Примечание: Характер момента сопротивления реактивный. Требуемую перегрузочную способность двигателя. Средняя температура нагрева изоляции двигателя не должна превышать допустимую. Предварительный подбор двигателя.
31883. Моделі реалізації об’єктно-орієнтованих систем 57.5 KB
  У кожного інтерфейсу СОМ два імена. Простої, символьне імя призначене для людей, воно не унікально (допускається, щоб це імя було однаковим у двох інтерфейсів). Інше, складне імя призначене для використання програмами. Програмне імя унікальне, це дозволяє точно ідентифікувати інтерфейс.