Управление транзакциями в СУБД: состояния, типы и ACID.

⚡ Умное резюме

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

  • 🔁 Основной модуль: В транзакции связанные операции чтения и записи группируются таким образом, чтобы они завершались успешно или завершались с ошибкой одновременно, никогда не на полпути.
  • 🧪 КИСЛОТНЫЕ Свойства: AtomБезопасность, стабильность, изоляция и долговечность гарантируют правильные результаты даже при сбоях или одновременном возникновении проблем.
  • 🚦 Состояния транзакций: Термины «активный», «частично согласованный», «согласованный», «неудачный» и «завершенный» описывают жизненный цикл транзакции.
  • 👥 Почему параллелизм: База данных является общей, поэтому одновременно выполняется множество транзакций, и данные друг друга не должны повреждать.
  • 📋 Расписание: Расписание упорядочивает операции параллельных транзакций, сохраняя при этом внутреннюю последовательность каждой транзакции.
  • 🔗 Сериализуемость: Параллельное расписание считается корректным, если его результат равен некоторому последовательному выполнению, оцениваемому по наличию конфликтов или эквивалентности представлений.
  • 🇧🇷 Восстановление: Неудачная транзакция откатывается, поэтому ее частичная запись никогда не достигает зафиксированной базы данных.

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

Что такое транзакция базы данных?

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

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

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

Факты о транзакциях в базах данных

  • Транзакция — это программная единица, выполнение которой может изменить или не изменить содержимое базы данных.
  • Концепция транзакции в СУБД реализована как единое целое.
  • Если операции с базой данных не обновляют базу данных, а только извлекают данные, этот тип транзакции называется транзакцией только для чтения.
  • Успешная транзакция может изменить состояние базы данных с одного СОГЛАСОВАННОГО на другое.
  • Транзакции в СУБД должны быть атомарными, согласованными, изолированными и надежными.
  • Если база данных находилась в несогласованном состоянии до транзакции, она останется в несогласованном состоянии и после транзакции.

Зачем нужна параллельная обработка транзакций?

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

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

  • Аппаратные сбои и системные ошибки.
  • Одновременное выполнение одной и той же транзакции, тупикили медленная работа.

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

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

Ниже перечислены различные состояния концепции транзакции в СУБД:

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

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

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

  1. Как только транзакция начинает выполняться, она становится активной. Она может инициировать операции чтения или записи.
  2. После завершения операций чтения и записи транзакция переходит в состояние частичного подтверждения.
  3. Далее, некоторые протоколы восстановления должны гарантировать, что сбой системы не приведет к невозможности окончательной записи изменений транзакции. Если эта проверка проходит успешно, транзакция фиксируется и переходит в состояние подтверждения.
  4. Если проверка не пройдена, транзакция переходит в состояние "неудачная".
  5. Если транзакция прерывается в активном состоянии, она переходит в состояние "неудачная". Транзакцию следует откатить, чтобы отменить последствия операций записи в базу данных.
  6. Завершенное состояние относится к транзакции, покидающей систему.

Что такое кислотные свойства?

КИСЛОТНЫЕ Свойства ACID используются для поддержания целостности базы данных во время обработки транзакций. ACID в СУБД означает Aтомичность, Cпостоянство, Iизоляция, и Dнадежность.

  • Atomлед: Транзакция представляет собой единую единицу операции. Вы либо выполняете его полностью, либо не выполняете вообще. Частичного исполнения быть не может.
  • Консистенция: После выполнения транзакции она должна перейти из одного согласованного состояния в другое.
  • изоляция: Каждая транзакция должна выполняться изолированно от других транзакций. При параллельном выполнении промежуточные результаты одновременно выполняемых транзакций не должны быть доступны друг другу.
  • Прочность: После успешного завершения транзакции изменения в базе данных должны сохраняться даже в случае сбоев системы.

Свойство ACID в СУБД с примером

Ниже приведён пример свойства ACID в СУБД:

Transaction 1: Begin X=X+50, Y = Y-50 END
Transaction 2: Begin X=1.1*X, Y=1.1*Y END

Транзакция 1 переводит 50 долларов США со счета X на счет Y.

Транзакция 2 кредитует каждый счет с выплатой процентов в размере 10%.

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

Типы транзакций

В зависимости от областей применения:

  • Нераспределенные против распределенных.
  • Компенсационные сделки.
  • Время совершения транзакции.
  • Онлайн против пакетной обработки.

Исходя из предпринятых действий:

  • Двухшаговый.
  • Ограниченный.
  • Модель действия.

По структуре:

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

Что такое расписание?

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

Пример

Initial Product Quantity is 10
Transaction 1: Update Product Quantity to 50
Transaction 2: Read Product Quantity

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

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

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

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

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

Что такое сериализуемость?

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

  • Сериализуемость конфликтов.
  • Возможность сериализации представления.

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

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

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

Часто задаваемые вопросы (FAQ)

Команда `commit` делает изменения, внесенные в транзакцию, постоянными в базе данных. Команда `rollback` отменяет все изменения, внесенные с момента начала транзакции, возвращая базу данных в согласованное состояние, существовавшее до ее начала.

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

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

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

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

Подведем итог этой публикации следующим образом: