Управление на транзакции в СУБД: Състояния, Типове и ACID
⚡ Умно обобщение
Управлението на транзакциите в базата данни третира една или повече операции с базата данни като една логическа единица, която премества базата данни от едно консистентно състояние в друго. То разчита на свойствата на ACID, дефинираните състояния на транзакциите и графиците, за да поддържа правилния едновременен достъп.

Какво е транзакция с база данни?
A Транзакция с база данни е логическа единица за обработка в СУБД, която включва една или повече операции за достъп до базата данни. Накратко, транзакциите в базата данни представляват реални събития на всяко предприятие.
Всички видове операции за достъп до база данни, които се извършват между началните и крайните оператори на транзакциите, се считат за една логическа транзакция в СУБД. По време на транзакцията базата данни е непоследователна. Едва след като транзакцията бъде извършена (commit), състоянието ѝ се променя от едно консистентно състояние в друго.

Факти за транзакциите в базата данни
- Транзакцията е програмна единица, чието изпълнение може или не може да промени съдържанието на база данни.
- Концепцията за транзакция в СУБД се изпълнява като единична единица.
- Ако операциите на базата данни не актуализират базата данни, а само извличат данни, този тип транзакция се нарича транзакция само за четене.
- Успешна транзакция може да промени базата данни от едно ПОСЛЕДОВАТЕЛНО СЪСТОЯНИЕ в друго.
- Транзакциите в СУБД трябва да бъдат атомарни, последователни, изолирани и издръжливи.
- Ако базата данни е била в несъгласувано състояние преди транзакция, тя ще остане в несъгласувано състояние след транзакцията.
Защо ви е необходима паралелност в транзакциите?
Базата данни е споделен ресурс. Тя се използва от много потребители и обработва едновременно. Примерите включват банкови системи, системи за резервации на железопътни и самолетни билети, наблюдение на фондовия пазар и инвентаризация и каси в супермаркети.
Неуправлението на едновременен достъп може да създаде проблеми като:
- Хардуерни повреди и системни сривове.
- Едновременно изпълнение на една и съща транзакция, задънена улицаили бавна производителност.
Контролирането на този споделен достъп е задача на контрол на паралелността, който използва заключване и времеви марки за безопасно преплитане на транзакциите. Преди това е полезно да се знаят състоянията, през които преминава транзакцията.
Състояния на транзакциите
Различните състояния на концепция за транзакция в СУБД са изброени по-долу:
| Област | Descriptйон |
|---|---|
| Активно състояние | Транзакцията влиза в активно състояние, когато започне процесът на изпълнение. По време на това състояние могат да се извършват операции за четене или запис. |
| Частично ангажиран | Транзакцията преминава в състояние на частично потвърдена (partically committed) след края ѝ. |
| Ангажирана държава | Когато транзакцията достигне състояние „committed“, изпълнението ѝ е завършено успешно и всички промени в нея се записват за постоянно в базата данни. |
| Неуспешна държава | Транзакцията се счита за неуспешна, когато някоя от проверките е неуспешна или ако транзакцията бъде прекратена, докато е в активно състояние. |
| Прекратено състояние | Състоянието на транзакцията достига състояние „прекратено“, когато напусне системата и не може да бъде рестартирана. |
Нека изучим едно диаграма на прехода на състоянието който подчертава как транзакцията се движи между тези различни състояния.
- След като транзакцията започне да се изпълнява, тя става активна. Тя може да издаде операция READ (ЧЕТЕНЕ) или WRITE (ЗАПИС).
- След като операциите READ и WRITE завършат, транзакцията достига състояние на частично потвърдена (particial committed).
- След това, някои протоколи за възстановяване трябва да гарантират, че системна повреда няма да доведе до невъзможност за постоянно записване на промените в транзакцията. Ако тази проверка е успешна, транзакцията се фиксира и влиза в състояние на commit.
- Ако проверката е неуспешна, транзакцията преминава в състояние „неуспешно“.
- Ако транзакцията бъде прекратена, докато е в активно състояние, тя преминава в състояние „неуспешно“. Транзакцията трябва да бъде отменена, за да се отмени ефектът от операциите ѝ по запис върху базата данни.
- Прекратеното състояние се отнася до транзакцията, напускаща системата.
Какви са ACID свойствата?
Свойства на 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, ще бъде прочетена остаряла информация за количеството на продукта. Следователно са необходими графици.
Паралелното изпълнение в база данни е неизбежно. Но паралелното изпълнение е разрешено, когато има отношение на еквивалентност между едновременно изпълняващите се транзакции. Тази еквивалентност е от три вида.
Еквивалентност на резултата: Ако два графика показват един и същ резултат след изпълнение, това се нарича график с еквивалентен резултат. Те могат да предлагат един и същ резултат за някои стойности и различни резултати за друг набор от стойности. Например, една транзакция актуализира количеството на продукта, докато друга актуализира данните на клиента.
Преглед на еквивалентността: Еквивалентността на изгледите възниква, когато транзакциите и в двата графика извършват подобно действие. Например, една транзакция вмъква подробности за продукта в таблицата с продукти, докато друга транзакция вмъква подробности за продукта в архивната таблица. Транзакцията е една и съща, но таблиците са различни.
Еквивалентност на конфликта: В този случай две транзакции актуализират или преглеждат един и същ набор от данни. Има конфликт между транзакциите, тъй като редът на изпълнение ще повлияе на резултата.
Какво е сериализируемост?
Сериализируемостта е процес на търсене на едновременен график, чийто изход е равен на сериен график, където транзакциите се изпълняват една след друга. В зависимост от вида на графика, има два вида сериализируемост:
- Сериализируемост на конфликта.
- Преглед на сериализируемостта.
Двете се различават по това колко стриктно преценяват еквивалентността, както е обобщено по-долу.
| Аспект | Сериализируемост на конфликти | Преглед на сериализируемостта |
|---|---|---|
| База | Ред на конфликтните операции | Връзки за четене от и окончателен запис |
| тест | Графът на приоритета трябва да е ацикличен | Преглед на еквивалентността на сериен график |
| Строгост | По-строг, подмножество | По-широк похват, включва писане на сляпо |
| Цена за проверка | Ефикасен | Изчислително трудно |
Всеки график, сериализируем за конфликти, е и сериализируем за изгледи, но не и обратното, поради което сериализируемостта на конфликти е практическият тест, който прилага една СУБД.

