Sobes.tech
Middle+

Jaké anomálie mohou nastat při provádění paralelních transakcí?

sobes.tech AI

Odpověď od AI

Při paralelním provádění transakcí mohou nastat následující anomálie:

  1. Ztracená aktualizace (Lost Update): Jedna transakce přepíše změny jiné transakce dříve, než jsou potvrzeny.

    Čas Transakce 1 Transakce 2
    t1 Čte hodnotu zůstatku (například 100)
    t2 Čte hodnotu zůstatku (například 100)
    t3 Zvyšuje zůstatek o 10 (Zůstatek = 110)
    t4 Zvyšuje zůstatek o 20 (Zůstatek = 120)
    t5 Potvrzuje změny (Zůstatek se stává 110)
    t6 Potvrzuje změny (Zůstatek se stává 120)

    Výsledek: Navzdory dvěma zvýšením je konečná hodnota Zůstatku 120, nikoli 130. Zvýšení od transakce 1 bylo ztraceno.

  2. Špinavé čtení (Dirty Read): Jedna transakce čte neuložené změny jiné transakce. Pokud se změny vrátí zpět, přečtená data jsou neplatná.

    Čas Transakce 1 Transakce 2
    t1 Začíná měnit zůstatek (100 -> 110)
    t2 Čte zůstatek (získá 110)
    t3 Vrací změnu (Zůstatek se vrací na 100)
    t4 Používá zůstatek = 110 ve výpočtech, ačkoliv skutečná hodnota je 100

    Výsledek: Transakce 2 zakládá své akce na datech, která nakonec nebyla potvrzena.

  3. Nepotvrditelné čtení (Non-Repeatable Read): Během jedné transakce se při opakovaném čtení stejného řádku získají různé hodnoty, protože jiná transakce provedla změny tohoto řádku mezi čteními.

    Čas Transakce 1 Transakce 2
    t1 Čte zůstatek (získá 100)
    t2 Mění zůstatek na 110 a potvrzuje
    t3 Opět čte zůstatek (získá 110 místo 100)

    Výsledek: Zůstatek se změnil v rámci jedné transakce, což může vést k nesprávným výsledkům.

  4. Fantomové čtení (Phantom Read): Podobné jako nepotvrditelné čtení, ale týká se přidání nebo odstranění řádků, které ovlivňují výsledky dotazu s predikátem.

    Čas Transakce 1 Transakce 2
    t1 Spouští dotaz SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' (získá 5)
    t2 Přidává novou objednávku se stavem 'Pending' a potvrzuje
    t3 Opět spouští SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' (získá 6)

    Výsledek: Při opakovaném provedení dotazu se objeví "fantomové" řádky, které při prvním čtení nebyly.

Tato anomálie jsou zabráněna použitím různých úrovní izolace transakcí.