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

⚡ Розумний підсумок

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

  • 🔁 Основний підрозділ: Транзакція групує пов'язані операції читання та запису таким чином, щоб вони досягали успіху або невдачі разом, а не наполовину.
  • 🧪 Властивості КИСЛОТИ: AtomІзоляція, узгодженість, ізоляція та довговічність гарантують правильні результати навіть за умови відмови або паралельності.
  • 🚦 Стан транзакцій: Активна, частково зафіксована, зафіксована, невдала та завершена описують життєвий цикл транзакції.
  • 👥 Чому паралельність: База даних є спільною, тому багато транзакцій виконуються одночасно і не повинні пошкоджувати дані одна одної.
  • 📋 Розклади: Розклад упорядковує операції паралельних транзакцій, зберігаючи при цьому внутрішню послідовність кожної транзакції.
  • 🔗 Серіалізованість: Паралельний розклад є правильним, коли його результат дорівнює деякому послідовному виконанню, що оцінюється за конфліктом або еквівалентністю переглядів.
  • ↩️ Відновлення: Невдала транзакція відкочується, тому її часткові записи ніколи не досягають зафіксованої бази даних.

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

Що таке транзакція бази даних?

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

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

Переміщення транзакцій бази даних між узгодженими станами
Транзакція бази даних

Факти про транзакції бази даних

  • Транзакція — це програмна одиниця, виконання якої може змінювати або не змінювати вміст бази даних.
  • Концепція транзакції в СУБД виконується як єдине ціле.
  • Якщо операції з базою даних не оновлюють базу даних, а лише отримують дані, цей тип транзакції називається транзакцією лише для читання.
  • Успішна транзакція може змінити стан бази даних з одного ПОСТІЙНОГО на інший.
  • Транзакції СУБД повинні бути атомарними, узгодженими, ізольованими та довговічними.
  • Якщо база даних перебувала в неузгодженому стані до транзакції, вона залишиться в такому неузгодженому стані після транзакції.

Навіщо потрібна паралельність у транзакціях?

База даних – це спільний ресурс. Вона використовується багатьма користувачами та процесами одночасно. Прикладами є банківські системи, системи бронювання залізничних та авіаквитків, моніторинг фондового ринку, а також управління запасами та оформлення замовлення в супермаркетах.

Якщо не керувати одночасним доступом, можуть виникнути такі проблеми:

  • Збої обладнання та системні збої.
  • Одночасне виконання однієї транзакції, тупик, або низька продуктивність.

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

Стани транзакцій

Нижче наведено різні стани концепції транзакції в СУБД:

стан Опис
Активний стан Транзакція переходить в активний стан, коли починається процес виконання. У цьому стані можна виконувати операції читання або запису.
Частково виконано Транзакція переходить у стан частково зафіксованої після її завершення.
Віддана держава Коли транзакція досягає стану commit, її виконання успішно завершується, і всі її зміни записуються в базу даних назавжди.
Невдала держава Транзакція вважається невдалою, коли будь-яка з перевірок не пройшла успішно або якщо транзакцію перервано, поки вона перебуває в активному стані.
Припинений стан Транзакція переходить у стан завершення, коли вона залишає систему і не може бути перезапущена.

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

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

  1. Як тільки транзакція починає виконуватися, вона стає активною. Вона може виконати операцію ЧИТАННЯ або ЗАПИСУ.
  2. Після завершення операцій ЧИТАННЯ та ЗАПИСУ транзакція досягає стану частково зафіксованої транзакції.
  3. Далі, деякі протоколи відновлення повинні гарантувати, що системний збій не призведе до неможливості постійного запису змін транзакції. Якщо ця перевірка успішна, транзакція фіксується та переходить у стан фіксації.
  4. Якщо перевірка не пройшла, транзакція переходить у стан «не вдалося».
  5. Якщо транзакцію перервано в активному стані, вона переходить у стан «не вдалося». Транзакцію слід відкотити, щоб скасувати вплив її операцій запису на базу даних.
  6. Припинений стан означає, що транзакція залишає систему.

Що таке властивості 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, буде зчитано застарілу інформацію про кількість продукту. Отже, потрібні графіки.

Паралельне виконання в базі даних неминуче. Але паралельне виконання дозволено, коли існує відношення еквівалентності між одночасно виконуваними транзакціями. Ця еквівалентність буває трьох типів.

Еквівалентність результату: Якщо два розклади відображають однаковий результат після виконання, це називається розкладом з еквівалентним результатом. Вони можуть пропонувати однаковий результат для одних значень і різні результати для іншого набору значень. Наприклад, одна транзакція оновлює кількість продукту, а інша — дані клієнта.

Переглянути еквівалентність: Еквівалентність переглядів виникає, коли транзакції в обох розкладах виконують подібну дію. Наприклад, одна транзакція вставляє деталі продукту в таблицю продуктів, а інша транзакція вставляє деталі продукту в таблицю архіву. Транзакція та сама, але таблиці різні.

Еквівалентність конфлікту: У цьому випадку дві транзакції оновлюють або переглядають один і той самий набір даних. Між транзакціями виникає конфлікт, оскільки порядок виконання впливатиме на результат.

Що таке можливість серіалізації?

Серіалізованість – це процес пошуку паралельного розкладу, вихід якого дорівнює послідовному розкладу, де транзакції виконуються одна за одною. Залежно від типу розкладу, існує два типи серіалізованості:

  • Серіалізованість конфлікту.
  • Переглянути серіалізованість.

Вони відрізняються тим, наскільки суворо вони оцінюють еквівалентність, як це коротко описано нижче.

Аспект Серіалізованість конфліктів Перегляд серіалізованості
Основа Порядок конфліктуючих операцій Зв'язки читання з та остаточного запису
Перевірити Граф пріоритету має бути ациклічним Перегляд еквівалентності послідовному розкладу
Строгість Суворіший, підмножина Ширше, включає написання наосліп
Вартість перевірки Ефективний Обчислювально складно

Кожен розклад, що серіалізується за конфліктами, також є серіалізованим за виглядом, але не навпаки, тому серіалізованість конфліктів є практичним тестом, який застосовує СУБД.

Поширені запитання

Команда «Зафіксувати» (Commit) робить зміни транзакції постійними в базі даних. Команда «Відкат» (Rollback) скасовує всі зміни з моменту початку транзакції, повертаючи базу даних до узгодженого стану, який існував до її початку.

AtomДовговічність. Якщо збій трапляється на півдорозі, атомарність гарантує, що часткова робота буде відкинута, тому транзакція оброблятиметься так, ніби вона ніколи не виконувалася. Довговічність захищає зафіксовану роботу після відновлення.

Штучний інтелект аналізує очікування блокувань та графіки взаємоблокувань, щоб виявити транзакції, які блокують інші, а потім рекомендує рівень ізоляції або зміну індексу, що зменшує конкуренцію, не послаблюючи коректність.

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

Послідовний розклад повністю виконує одну транзакцію перед запуском наступної, тому жодне чергування не може пошкодити дані. Він повільний, тому метою є створення паралельного розкладу, який можна серіалізувати за ним.

Підсумуйте цей пост за допомогою: