Sobes.tech
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:

  1. Read Uncommitted (Nezávazné čtení): Nejnižší úroveň. Transakce může číst nezávazné změny jiných transakcí (špinavé čtení).
  2. Read Committed (Závazné čtení): Transakce může číst pouze data, která byla potvrzena jinými transakcemi. Vyhýbá se "špinavému" čtení.
  3. 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é".
  4. 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.