Transakce

Hlavním smyslem používání transakcí, tj. transakčního zpracování, je udržení databáze v konzistentním stavu. Jestliže na sobě některé operace závisí, sdružíme je do jedné transakce a tím zabezpečíme, že budou vykonány buď všechny, nebo žádná.

Transakční zpracování zajištuje dva základní požadavky na databázi:

Řízení souběžného zpracování
Každý uživatel vidí konzistentní stav databáze i když více uživatelu přistupuje asynchronně ke stejným údajum.

Zotavení z chyb
Zajištuje, že stav databáze není narušen v případě chyby software, systému, nebo fyzického média v pruběhu zpracování úlohy měnící data v databázi. Využívá se transakční žurnál (log).

V souvislosti s pojmem transakce se obvykle hovoří o vlastnostech ACID. Musí splňovat 4 dílčí vlastnosti

Vlastnost Popis
Atomicita
(Atomicity)
Transakce musí proběhnout buď celá nebo vubec. Není možné, aby se pro jevila jen část příkazů.
Konzistence
(Consistency)
Transformuje databázi z konzistentního stavu do jiného konzistentního stavu. Po dokončení transakce musejí být všechna IO v pořádku.
Nezávislost
(Independence/Izolation)
Dílčí efekty jedné transakce nejsou viditelné jiným transakcím.
Trvanlivost
(Durability)
Efekty úspěšně ukončené (potvrzené) transakce jsou uloženy do databáze (této vlatnosti se také řáká perzistence).

Stavový diagram transakce

Konečný automat

  • S: aktivní (Active). Od začátku (probíhají DML příkazy)
  • P: částečne potvrzený (Partially Commited) Po provedení poslední operace transakce.
  • C: potvrzený (Commited). Po úspěšném zakončení, tj. po potvrzení operace COMMIT.
  • F: chybný (Failed). V normálním pruběhu transakce nelze pokračovat.
  • A: zrušený (Aborted). Po skončení operace ROLLBACK, tj. uvedení databáze do stavu před započetím transakce.

Každá transakce končí voláním buď příkazu COMMIT (normální ukončení) nebo operací ABORT indikující, že transakce nebyla normálně ukončena a že všechny její efekty je nutné odstranit.


Obnova databáze po pádu

Cílem zotavení z chyb je, aby po chybné či zrušené transakci nebyly jako vedlejší efekt nevhodně ovlivněny ostatní běžící transakce nebo samotná databáze. Databáze může být zrušenou transakcí uvedená do nekonzistentního stavu.

Vlastnost atomicity vychází z implementace „změnových vektorů“ v transakčním logu (žurnálu). Používané operace v žurnálu jsou UNDO a REDO. Žurnál a přidružená infrastruktura umožňuje také implementaci durability u transakčního zpracování.

  • Database buffer cache (bloky stejné velikosti) - data z disku se nahrají do paměti. Přenáší se v datových blocích.
  • Žurnál - sekvence změnových vektorů (transID, blockID, old data, new data) které jsou ukládány na disk. V průběhu transakčního zpracování si databázový systém pamatuje obvykle nové a staré změny dvakrát.

Checkpoint (synchronizace database buffer cache a DB bloků na disku) má jednoznačné checkpoint number (System ChangeNumber - SCN).

Problémy s paralelním zpracováním

Transakce je vhodnou jednotkou zpracování i pro paralelní přístup. Velmi silným omezením provozu může být vzájemná výlučnost, kdy transakce nesmí být přerušená od jiné transakce.

Problém paralelizace podobný jako písaři - čtenáři a řeší se pomocí zámků. Stanovení pořadí provádění dilčích akcí více transakcí v čase se nazývá rozvrh.

rozvrhovač (scheduler) řízení paralelního zpracování transakcí.

Stupně izolace

Různé druhy zámků. Vlastnost nezávislosti.

SET TRANSACTION ISOLATION LEVEL mod, kde modem udáváme úroveň izolace. Nabízí se čtyři možnosti, z jichž implicitní je SERIALIZABLE. Ostatní jsou READ UNCOMMITTED, READ COMMITTED a REPEATABLE READ. Způsob přístupu k databázi je buď READ ONLY nebo READ WRITE.

Read uncommited Read commited Repeatible read Serializable
Anomálie 0 1 2 3
Dočasná aktualiz x - - -
Neopakovatelné čtení x x - -
Fantónx x x x -

Související