Aké anomálie môžu nastať pri vykonávaní paralelných transakcií?
sobes.tech AI
Odpoveď od AI
Pri paralelnom vykonávaní transakcií môžu nastať nasledujúce anomálie:
-
Stratené aktualizácie (Lost Update): Jedna transakcia prepíše zmeny inej transakcie skôr, než boli tieto zmeny potvrdené.
Čas Transakcia 1 Transakcia 2 t1 Číta hodnotu zostatku (napríklad 100) t2 Číta hodnotu zostatku (napríklad 100) t3 Zvyšuje zostatok o 10 (Zostatok = 110) t4 Zvyšuje zostatok o 20 (Zostatok = 120) t5 Potvrdzuje zmeny (Zostatok sa stáva 110) t6 Potvrdzuje zmeny (Zostatok sa stáva 120) Výsledok: Napriek dvom zvýšeniam je konečná hodnota zostatku 120, nie 130. Zvýšenie od transakcie 1 je stratené.
-
Špinavé čítanie (Dirty Read): Jedna transakcia číta nepotvrdené zmeny inej transakcie. Ak sa zmeny, ktoré urobila, vrátia späť, prečítané údaje budú neplatné.
Čas Transakcia 1 Transakcia 2 t1 Začína meniť zostatok (100 -> 110) t2 Číta zostatok (získa 110) t3 Vracia zmeny späť (Zostatok sa vráti na 100) t4 Používa zostatok = 110 v výpočtoch, hoci skutočná hodnota je 100 Výsledok: Transakcia 2 zakladá svoje akcie na údajoch, ktoré nakoniec neboli potvrdené.
-
Neopakovateľné čítanie (Non-Repeatable Read): Počas jednej transakcie dostanú opakované čítania tej istej riadky rôzne hodnoty, pretože iná transakcia potvrdila zmeny tejto riadky medzi čítaniami.
Čas Transakcia 1 Transakcia 2 t1 Číta zostatok (získa 100) t2 Mení zostatok na 110 a potvrdzuje t3 Opäť číta zostatok (získa 110 namiesto očakávaných 100) Výsledok: Zostatok sa zmenil v rámci jednej transakcie, čo môže viesť k nesprávnym výsledkom.
-
Fantomové čítanie (Phantom Read): Podobné neopakovateľnému čítaniu, ale týka sa nie zmien existujúcich riadkov, ale pridania alebo odstránenia riadkov, ktoré ovplyvňujú výsledky dotazu s predikátom.
Čas Transakcia 1 Transakcia 2 t1 Vykonáva dotaz SELECT COUNT(*) FROM Orders WHERE Status = 'Pending'(získa 5)t2 Pridáva novú objednávku so stavom 'Pending' a potvrdzuje t3 Opäť vykonáva SELECT COUNT(*) FROM Orders WHERE Status = 'Pending'(získa 6)Výsledok: Pri opakovanom vykonaní dotazu sa objavia "fantómové" riadky, ktorých pri prvom čítaní nebolo.
Tieto anomálie sa zabraňujú použitím rôznych úrovní izolácie transakcií.