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

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

Факты о транзакциях в базах данных
- Транзакция — это программная единица, выполнение которой может изменить или не изменить содержимое базы данных.
- Концепция транзакции в СУБД реализована как единое целое.
- Если операции с базой данных не обновляют базу данных, а только извлекают данные, этот тип транзакции называется транзакцией только для чтения.
- Успешная транзакция может изменить состояние базы данных с одного СОГЛАСОВАННОГО на другое.
- Транзакции в СУБД должны быть атомарными, согласованными, изолированными и надежными.
- Если база данных находилась в несогласованном состоянии до транзакции, она останется в несогласованном состоянии и после транзакции.
Зачем нужна параллельная обработка транзакций?
База данных — это общий ресурс. Она используется множеством пользователей и процессов одновременно. Примерами могут служить банковские системы, системы бронирования железнодорожных и авиарейсов, мониторинг фондового рынка, а также системы учета товаров и кассовых аппаратов в супермаркетах.
Отсутствие управления одновременным доступом может создать такие проблемы, как:
- Аппаратные сбои и системные ошибки.
- Одновременное выполнение одной и той же транзакции, тупикили медленная работа.
Контроль за этим общим доступом — задача контроль параллелизма, которая использует блокировки и временные метки для безопасного чередования транзакций. Перед этим полезно знать, через какие состояния проходит транзакция.
Состояния транзакций
Ниже перечислены различные состояния концепции транзакции в СУБД:
| Область | Описание |
|---|---|
| Активное состояние | Транзакция переходит в активное состояние, когда начинается процесс выполнения. В этом состоянии могут выполняться операции чтения или записи. |
| Частично совершено | После завершения транзакции она переходит в состояние частичного подтверждения. |
| Выполненное состояние | Когда транзакция достигает состояния подтверждения, её выполнение считается успешно завершенным, и все изменения записываются в базу данных навсегда. |
| Неудачное состояние | Транзакция считается неудачной, если не пройдена хотя бы одна из проверок или если транзакция прерывается, находясь в активном состоянии. |
| Прекращенное состояние | Состояние транзакции переходит в состояние "завершена", когда транзакция покидает систему и не может быть перезапущена. |
Давайте изучим диаграмма перехода состояний это подчеркивает, как транзакция перемещается между этими различными состояниями.
- Как только транзакция начинает выполняться, она становится активной. Она может инициировать операции чтения или записи.
- После завершения операций чтения и записи транзакция переходит в состояние частичного подтверждения.
- Далее, некоторые протоколы восстановления должны гарантировать, что сбой системы не приведет к невозможности окончательной записи изменений транзакции. Если эта проверка проходит успешно, транзакция фиксируется и переходит в состояние подтверждения.
- Если проверка не пройдена, транзакция переходит в состояние "неудачная".
- Если транзакция прерывается в активном состоянии, она переходит в состояние "неудачная". Транзакцию следует откатить, чтобы отменить последствия операций записи в базу данных.
- Завершенное состояние относится к транзакции, покидающей систему.
Что такое кислотные свойства?
КИСЛОТНЫЕ Свойства 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, будет считана устаревшая информация о количестве товара. Следовательно, графики необходимы.
Параллельное выполнение в базе данных неизбежно. Однако параллельное выполнение допускается, когда существует отношение эквивалентности между одновременно выполняющимися транзакциями. Эта эквивалентность бывает трех типов.
Эквивалентность результатов: Если два расписания показывают одинаковый результат после выполнения, такое расписание называется расписанием с эквивалентным результатом. Они могут давать одинаковый результат для одних значений и разные результаты для другого набора значений. Например, одна транзакция обновляет количество товара, а другая — данные клиента.
Эквивалентность просмотра: Эквивалентность представлений возникает, когда транзакции в обоих расписаниях выполняют аналогичное действие. Например, одна транзакция вставляет сведения о товаре в таблицу товаров, а другая — в архивную таблицу. Транзакция одна и та же, но таблицы разные.
Конфликтная эквивалентность: В данном случае две транзакции обновляют или просматривают один и тот же набор данных. Между транзакциями возникает конфликт, поскольку порядок их выполнения влияет на результат.
Что такое сериализуемость?
Последовательная обработка — это процесс поиска параллельного расписания, выходные данные которого равны последовательному расписанию, где транзакции выполняются одна за другой. В зависимости от типа расписания, существует два типа последовательной обработки:
- Сериализуемость конфликтов.
- Возможность сериализации представления.
Эти два подхода различаются по степени строгости оценки эквивалентности, как это суммировано ниже.
| Аспект | Конфликтная сериализуемость | Просмотр сериализуемости |
|---|---|---|
| База | Порядок противоречащих операций | Взаимосвязи чтения и записи в конечный файл |
| Тест | Граф предшествования должен быть ациклическим. | Рассматривайте эквивалентность последовательному расписанию. |
| взыскательность | Более строгий, подмножество | Более широкий круг вопросов, включающий анонимные записи. |
| Стоимость проверки | Эффективный | Вычислительно сложная задача |
Каждое расписание, допускающее сериализацию в конфликтных ситуациях, также допускает сериализацию в представлениях, но не наоборот, поэтому сериализуемость в конфликтных ситуациях является практическим критерием, применяемым СУБД.

