Middle
Jaké jsou typy izolace transakcí?
sobes.tech AI
Odpověď od AI
Izolace transakcí určuje, do jaké míry může jedna transakce vidět mezilehlé změny jiných transakcí, které běží paralelně.
Standard SQL definuje čtyři úrovně izolace:
- Read Uncommitted (Nezávazné čtení): Nejnižší úroveň. Transakce může číst nezávazné změny jiných transakcí (špinavé čtení).
- Read Committed (Závazné čtení): Transakce může číst pouze data, která byla potvrzena jinými transakcemi. Vyhýbá se "špinavému" čtení.
- Repeatable Read (Opakovatelné čtení): Transakce garantuje, že data přečtená během transakce se při opakovaném čtení nezmění. Vyhýbá se "špinavému" a "neopakovatelnému" čtení. Mohou se vyskytnout "fantomové".
- Serializable (Serializovatelné): Nejvyšší úroveň izolace. Zaručuje, že paralelní transakce budou prováděny tak, jako by byly sekvenční. Vyhýbá se všem nežádoucím jevům: "špinavému" čtení, "neopakovatelnému" čtení a "fantomům".
Nežádoucí jevy při paralelním provádění transakcí:
- Dirty Read (Špinavé čtení): Transakce A čte data, která byla změněna transakcí B, ale ještě nebyla potvrzena. Pokud transakce B změny vrátí, transakce A bude pracovat s nesprávnými daty.
- Non-repeatable Read (Neopakovatelný čtení): Transakce A čte stejná data dvakrát, ale mezi čteními transakce B potvrdí změnu těchto dat. Výsledkem jsou odlišné hodnoty.
- Phantom Read (Fantomové čtení): Transakce A provádí dotaz, který vrací množinu řádků. Transakce B potvrdí vložení nebo odstranění řádků odpovídajících kritériím dotazu A. Při opakovaném provedení dotazu dostane transakce A jinou množinu řádků.
Souhrnná tabulka nežádoucích jevů podle úrovní izolace:
| Úroveň izolace | Špinavé čtení | Neopakovatelný čtení | Fantomy |
|---|---|---|---|
| Read Uncommitted | Ano | Ano | Ano |
| Read Committed | Ne | Ano | Ano |
| Repeatable Read | Ne | Ne | Ano |
| Serializable | Ne | Ne | Ne |
Volba úrovně izolace ovlivňuje výkon a správnost chodu aplikace. Čím vyšší je úroveň izolace, tím vyšší jsou dodatečné náklady.