Správa transakcí v DBMS: Stavy, typy a ACID
⚡ Chytré shrnutí
Správa databázových transakcí (Database Transaction Management) zachází s jednou nebo více databázovými operacemi jako s jednou logickou jednotkou, která přesouvá databázi z jednoho konzistentního stavu do druhého. Pro zajištění správného souběžného přístupu se spoléhá na vlastnosti ACID, definované stavy transakcí a plány.

Co je to databázová transakce?
A Databázová transakce je logická jednotka zpracování v systému DBMS, která zahrnuje jednu nebo více operací přístupu k databázi. Stručně řečeno, databázové transakce představují reálné události v jakémkoli podniku.
Všechny typy operací přístupu k databázi, které jsou uchovávány mezi počátečním a koncovým příkazem transakce, jsou v systému DBMS považovány za jednu logickou transakci. Během transakce je databáze nekonzistentní. Teprve po potvrzení transakce se stav změní z jednoho konzistentního stavu na jiný.

Fakta o transakcích v databázi
- Transakce je programová jednotka, jejíž provedení může nebo nemusí změnit obsah databáze.
- Transakční koncept v DBMS je realizován jako jeden celek.
- Pokud databázové operace neaktualizují databázi, ale pouze načítají data, tento typ transakce se nazývá transakce pouze pro čtení.
- Úspěšná transakce může změnit stav databáze z jednoho KONZISTENTNÍHO STAVU do jiného.
- Transakce DBMS musí být atomické, konzistentní, izolované a odolné.
- Pokud by byla databáze před transakcí v nekonzistentním stavu, zůstala by v nekonzistentním stavu i po transakci.
Proč potřebujete souběžnost v transakcích?
Databáze je sdílený zdroj. Používá ji mnoho uživatelů a procesů současně. Mezi příklady patří bankovní systémy, rezervační systémy pro železnice a lety, monitorování akciového trhu a systémy pro správu zásob a pokladen v supermarketech.
Nespravování souběžného přístupu může způsobit problémy jako:
- Selhání hardwaru a pády systému.
- Souběžné provádění stejné transakce, zablokování, nebo pomalý výkon.
Řízení tohoto sdíleného přístupu je úkolem kontrola souběžnosti, který používá zamykání a časová razítka k bezpečnému prokládání transakcí. Předtím je užitečné znát stavy, kterými transakce prochází.
Stavy transakcí
Níže jsou uvedeny různé stavy konceptu transakce v DBMS:
| Stát | Description |
|---|---|
| Aktivní stav | Transakce přejde do aktivního stavu, když proces provádění začne. Během tohoto stavu lze provádět operace čtení nebo zápisu. |
| Částečně odsouhlaseno | Transakce přejde do stavu částečně potvrzeno po jejím ukončení. |
| Oddaný stát | Když transakce dosáhne stavu commit, její provedení je úspěšně dokončeno a všechny její změny jsou trvale zaznamenány do databáze. |
| Neúspěšný stav | Transakce se považuje za neúspěšnou, když selže kterákoli z kontrol nebo pokud je transakce přerušena, když je v aktivním stavu. |
| Ukončený stát | Stav transakce dosáhne stavu ukončení, když transakce opustí systém a nelze ji restartovat. |
Pojďme si prozkoumat diagram přechodu stavu který zdůrazňuje, jak se transakce pohybuje mezi těmito různými stavy.
- Jakmile se transakce zahájí, stane se aktivní. Může vydat operaci ČTENÍ nebo ZÁPIS.
- Jakmile jsou operace ČTENÍ a ZÁPIS dokončeny, transakce dosáhne stavu částečně potvrzeno.
- Dále některé protokoly obnovy musí zajistit, aby selhání systému nezpůsobilo nemožnost trvalého zaznamenání změn transakce. Pokud je tato kontrola úspěšná, transakce se potvrdí a přejde do stavu commit.
- Pokud kontrola selže, transakce přejde do stavu selhání.
- Pokud je transakce přerušena v aktivním stavu, přejde do stavu selhání. Transakce by měla být vrácena zpět, aby se zrušil vliv jejích operací zápisu na databázi.
- Stav ukončeno označuje transakci opouštějící systém.
Co jsou vlastnosti ACID?
Vlastnosti kyseliny se používají k udržení integrity databáze během zpracování transakcí. ACID v DBMS znamená Atomicity, Cstálost, Iútěcha a Dužitkovost.
- Atomicity: Transakce je jedna jednotka operace. Buď ji provedete úplně, nebo ji neprovedete vůbec. Nemůže dojít k částečnému provedení.
- Konzistence: Jakmile je transakce provedena, měla by se přesunout z jednoho konzistentního stavu do druhého.
- Izolace: Transakce by měla být provedena odděleně od ostatních transakcí. Během souběžného provádění by mezivýsledky ze současně provedených transakcí neměly být vzájemně zpřístupňovány.
- Trvanlivost: Po úspěšném dokončení transakce by změny v databázi měly přetrvávat, a to i v případě selhání systému.
Vlastnost ACID v DBMS s příkladem
Níže je uveden příklad vlastnosti ACID v systému DBMS:
Transaction 1: Begin X=X+50, Y = Y-50 END Transaction 2: Begin X=1.1*X, Y=1.1*Y END
Transakce 1 je převod 50 USD z účtu X na účet Y.
Transakce 2 je připsání 10% úroku na každý účet.
Pokud jsou obě transakce odeslány současně, neexistuje žádná záruka, že se transakce 1 provede před transakcí 2 nebo naopak. Bez ohledu na pořadí musí být výsledek takový, jako by transakce probíhaly sériově, jedna po druhé.
Typy transakcí
Na základě oblastí použití:
- Nedistribuované vs. distribuované.
- Kompenzační transakce.
- Načasování transakce.
- Online vs. dávkové.
Na základě akcí:
- Dvoustupňový.
- Omezený.
- Akční model.
Na základě struktury:
- Ploché nebo jednoduché transakce: sestávají ze sekvence primitivních operací provedených mezi operací začátku a konce.
- Vnořené transakce: transakce, která obsahuje další transakce.
- Pracovní postup.
Co je rozvrh?
Plán je proces vytváření jedné skupiny více paralelních transakcí a jejich postupného provádění. Měl by zachovat pořadí, ve kterém se instrukce v každé transakci objevují. Pokud jsou dvě transakce provedeny současně, výsledek jedné transakce může ovlivnit výstup druhé transakce.
Příklad
Initial Product Quantity is 10 Transaction 1: Update Product Quantity to 50 Transaction 2: Read Product Quantity
Pokud je transakce 2 provedena před transakcí 1, budou načteny zastaralé informace o množství produktu. Proto jsou nutné rozvrhy.
Paralelní provádění v databázi je nevyhnutelné. Paralelní provádění je však povoleno, pokud mezi současně prováděnými transakcemi existuje vztah ekvivalence. Tato ekvivalence je tří typů.
Ekvivalence výsledků: Pokud dva rozvrhy po provedení zobrazují stejný výsledek, nazývá se to rozvrh s ekvivalentním výsledkem. Pro některé hodnoty mohou nabízet stejný výsledek a pro jinou sadu hodnot různé výsledky. Například jedna transakce aktualizuje množství produktu, zatímco jiná aktualizuje údaje o zákazníkovi.
Zobrazit ekvivalenci: Ekvivalence zobrazení nastává, když transakce v obou plánech provedou podobnou akci. Například jedna transakce vloží podrobnosti o produktu do tabulky produktů, zatímco jiná transakce vloží podrobnosti o produktu do archivní tabulky. Transakce je stejná, ale tabulky se liší.
Ekvivalence konfliktu: V tomto případě dvě transakce aktualizují nebo zobrazují stejnou sadu dat. Mezi transakcemi dochází ke konfliktu, protože pořadí provedení ovlivní výstup.
Co je serializovatelnost?
Serializovatelnost je proces hledání souběžného rozvrhu, jehož výstup je shodný se sériovým rozvrhem, kde se transakce provádějí jedna po druhé. V závislosti na typu rozvrhu existují dva typy serializovatelnosti:
- Serializovatelnost konfliktů.
- Zobrazit serializovatelnost.
Tyto dva se liší v tom, jak striktně posuzují ekvivalenci, jak je shrnuto níže.
| Vzhled | Serializovatelnost konfliktů | Zobrazit serializovatelnost |
|---|---|---|
| Základna | Pořadí konfliktních operací | Relace typu čtení z a konečný zápis |
| test | Graf priorit musí být acyklický | Zobrazit ekvivalenci sériového rozvrhu |
| Přísnost | Přísnější, podmnožina | Širší, zahrnuje psaní naslepo |
| Cena za kontrolu | Efektivní | Výpočetně náročné |
Každý konfliktně serializovatelný plán je také serializovatelný z pohledu, ale ne naopak, a proto je serializovatelnost konfliktů praktickým testem, který systém DBMS používá.

