Управління транзакціями в СУБД: стани, типи та ACID
⚡ Розумний підсумок
Керування транзакціями бази даних трактує одну або декілька операцій бази даних як єдину логічну одиницю, яка переміщує базу даних з одного узгодженого стану в інший. Воно спирається на властивості ACID, визначені стани транзакцій та розклади для забезпечення правильності одночасного доступу.

Що таке транзакція бази даних?
A Транзакція бази даних — це логічна одиниця обробки в СУБД, яка передбачає одну або кілька операцій доступу до бази даних. Коротко кажучи, транзакції бази даних представляють реальні події будь-якого підприємства.
Усі типи операцій доступу до бази даних, що зберігаються між початковим та кінцевим операторами транзакції, вважаються однією логічною транзакцією в СУБД. Під час транзакції база даних є неконзистентною. Тільки після підтвердження транзакції стан змінюється з одного консистентного стану на інший.

Факти про транзакції бази даних
- Транзакція — це програмна одиниця, виконання якої може змінювати або не змінювати вміст бази даних.
- Концепція транзакції в СУБД виконується як єдине ціле.
- Якщо операції з базою даних не оновлюють базу даних, а лише отримують дані, цей тип транзакції називається транзакцією лише для читання.
- Успішна транзакція може змінити стан бази даних з одного ПОСТІЙНОГО на інший.
- Транзакції СУБД повинні бути атомарними, узгодженими, ізольованими та довговічними.
- Якщо база даних перебувала в неузгодженому стані до транзакції, вона залишиться в такому неузгодженому стані після транзакції.
Навіщо потрібна паралельність у транзакціях?
База даних – це спільний ресурс. Вона використовується багатьма користувачами та процесами одночасно. Прикладами є банківські системи, системи бронювання залізничних та авіаквитків, моніторинг фондового ринку, а також управління запасами та оформлення замовлення в супермаркетах.
Якщо не керувати одночасним доступом, можуть виникнути такі проблеми:
- Збої обладнання та системні збої.
- Одночасне виконання однієї транзакції, тупик, або низька продуктивність.
Контроль цього спільного доступу є завданням контроль одночасності, який використовує блокування та позначки часу для безпечного чергування транзакцій. Перед цим корисно знати стани, через які проходить транзакція.
Стани транзакцій
Нижче наведено різні стани концепції транзакції в СУБД:
| стан | Опис |
|---|---|
| Активний стан | Транзакція переходить в активний стан, коли починається процес виконання. У цьому стані можна виконувати операції читання або запису. |
| Частково виконано | Транзакція переходить у стан частково зафіксованої після її завершення. |
| Віддана держава | Коли транзакція досягає стану commit, її виконання успішно завершується, і всі її зміни записуються в базу даних назавжди. |
| Невдала держава | Транзакція вважається невдалою, коли будь-яка з перевірок не пройшла успішно або якщо транзакцію перервано, поки вона перебуває в активному стані. |
| Припинений стан | Транзакція переходить у стан завершення, коли вона залишає систему і не може бути перезапущена. |
Давайте вивчимо діаграма переходів станів який підкреслює, як транзакція переміщується між цими різними станами.
- Як тільки транзакція починає виконуватися, вона стає активною. Вона може виконати операцію ЧИТАННЯ або ЗАПИСУ.
- Після завершення операцій ЧИТАННЯ та ЗАПИСУ транзакція досягає стану частково зафіксованої транзакції.
- Далі, деякі протоколи відновлення повинні гарантувати, що системний збій не призведе до неможливості постійного запису змін транзакції. Якщо ця перевірка успішна, транзакція фіксується та переходить у стан фіксації.
- Якщо перевірка не пройшла, транзакція переходить у стан «не вдалося».
- Якщо транзакцію перервано в активному стані, вона переходить у стан «не вдалося». Транзакцію слід відкотити, щоб скасувати вплив її операцій запису на базу даних.
- Припинений стан означає, що транзакція залишає систему.
Що таке властивості ACID?
Властивості КИСЛОТИ використовуються для підтримки цілісності бази даних під час обробки транзакцій. ACID у СУБД розшифровується як Aтомічність, Cнаполегливість, Iрозчинення, і Dуральність.
- Atomicity: Транзакція — це окрема одиниця операції. Ви або виконуєте його повністю, або не виконуєте взагалі. Не може бути часткового виконання.
- Послідовність: Після виконання транзакції вона повинна переходити з одного узгодженого стану в інший.
- Ізоляція: Транзакцію слід виконувати ізольовано від інших транзакцій. Під час одночасного виконання проміжні результати одночасно виконаних транзакцій не повинні бути доступними один одному.
- міцність: Після успішного завершення транзакції зміни в базі даних повинні зберігатися навіть у разі системних збоїв.
Властивість 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 або навпаки. Незалежно від порядку, результат має бути таким, ніби транзакції відбуваються послідовно, одна за одною.
Типи транзакцій
Залежно від сфер застосування:
- Нерозподілений проти розподіленого.
- Компенсаційні операції.
- Час транзакції.
- Онлайн проти пакетного виконання.
На основі дій:
- Двоступеневий.
- Обмежено.
- Модель дій.
На основі структури:
- Плоскі або прості транзакції: складаються з послідовності примітивних операцій, що виконуються між операцією початку та завершення.
- Вкладені транзакції: транзакція, яка містить інші транзакції.
- робочий процес.
Що таке розклад?
Розклад – це процес створення однієї групи з кількох паралельних транзакцій та їх виконання по черзі. Він повинен зберігати порядок, у якому інструкції з'являються в кожній транзакції. Якщо дві транзакції виконуються одночасно, результат однієї транзакції може вплинути на вивід іншої.
Приклад
Initial Product Quantity is 10 Transaction 1: Update Product Quantity to 50 Transaction 2: Read Product Quantity
Якщо транзакцію 2 виконано перед транзакцією 1, буде зчитано застарілу інформацію про кількість продукту. Отже, потрібні графіки.
Паралельне виконання в базі даних неминуче. Але паралельне виконання дозволено, коли існує відношення еквівалентності між одночасно виконуваними транзакціями. Ця еквівалентність буває трьох типів.
Еквівалентність результату: Якщо два розклади відображають однаковий результат після виконання, це називається розкладом з еквівалентним результатом. Вони можуть пропонувати однаковий результат для одних значень і різні результати для іншого набору значень. Наприклад, одна транзакція оновлює кількість продукту, а інша — дані клієнта.
Переглянути еквівалентність: Еквівалентність переглядів виникає, коли транзакції в обох розкладах виконують подібну дію. Наприклад, одна транзакція вставляє деталі продукту в таблицю продуктів, а інша транзакція вставляє деталі продукту в таблицю архіву. Транзакція та сама, але таблиці різні.
Еквівалентність конфлікту: У цьому випадку дві транзакції оновлюють або переглядають один і той самий набір даних. Між транзакціями виникає конфлікт, оскільки порядок виконання впливатиме на результат.
Що таке можливість серіалізації?
Серіалізованість – це процес пошуку паралельного розкладу, вихід якого дорівнює послідовному розкладу, де транзакції виконуються одна за одною. Залежно від типу розкладу, існує два типи серіалізованості:
- Серіалізованість конфлікту.
- Переглянути серіалізованість.
Вони відрізняються тим, наскільки суворо вони оцінюють еквівалентність, як це коротко описано нижче.
| Аспект | Серіалізованість конфліктів | Перегляд серіалізованості |
|---|---|---|
| Основа | Порядок конфліктуючих операцій | Зв'язки читання з та остаточного запису |
| Перевірити | Граф пріоритету має бути ациклічним | Перегляд еквівалентності послідовному розкладу |
| Строгість | Суворіший, підмножина | Ширше, включає написання наосліп |
| Вартість перевірки | Ефективний | Обчислювально складно |
Кожен розклад, що серіалізується за конфліктами, також є серіалізованим за виглядом, але не навпаки, тому серіалізованість конфліктів є практичним тестом, який застосовує СУБД.

