СУБД - Транзакция

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

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

Счет

Open_Account(A)
Old_Balance = A.balance
New_Balance = Old_Balance - 500
A.balance = New_Balance
Close_Account(A)

B счет

Open_Account(B)
Old_Balance = B.balance
New_Balance = Old_Balance + 500
B.balance = New_Balance
Close_Account(B)

ACID Свойства

Транзакция - это очень маленькая единица программы, и она может содержать несколько задач низкого уровня. Для обеспечения точности, полноты и целостности данных транзакция в системе базы данных должна поддерживать единообразие, согласованность, согласованность и устойчивость, обычно известные как свойства ACID.

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

  • Согласованность - база данных должна оставаться в согласованном состоянии после любой транзакции. Ни одна транзакция не должна оказывать неблагоприятного воздействия на данные, находящиеся в базе данных. Если база данных находилась в согласованном состоянии до выполнения транзакции, она должна оставаться согласованной и после выполнения транзакции.

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

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

Сериализуемость

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

  • Расписание - хронологическая последовательность выполнения транзакции называется расписанием. В расписании может быть много транзакций, каждая из которых состоит из нескольких инструкций / задач.

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

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

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

Графики эквивалентности

График эквивалентности может быть следующих типов:

Результат Эквивалентность

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

Посмотреть эквивалентность

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

Например -

  • Если T читает начальные данные в S1, то он также читает начальные данные в S2.

  • Если T читает значение, записанное J в S1, то оно также читает значение, записанное J в S2.

  • Если T выполняет окончательную запись значения данных в S1, то он также выполняет окончательную запись значения данных в S2.

Эквивалентность конфликта

Два расписания будут конфликтовать, если они имеют следующие свойства -

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

Два расписания с несколькими транзакциями с конфликтующими операциями называются конфликтно-эквивалентными, если и только если -

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

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

Состояния транзакций

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

Состояния транзакции
  • Активно - в этом состоянии транзакция выполняется. Это начальное состояние каждой транзакции.

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

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

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

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