Sobes.tech
Middle+

Paralel əməliyyatlar zamanı hansı anomaliyalar baş verə bilər?

sobes.tech Süni İntellekt

AI-dan cavab

Eyni zamanda tranzaksiyaların icrası zamanı aşağıdakı anomaliyalar baş verə bilər:

  1. Itirilmiş Yeniləmə (Lost Update): Bir tranzaksiya digərinin dəyişikliklərini qeydiyyata almadan əvvəl yeniləyir.

    Vaxt Tranzaksiya 1 Tranzaksiya 2
    t1 Balans dəyərini oxuyur (məsələn, 100)
    t2 Balans dəyərini oxuyur (məsələn, 100)
    t3 Balansı 10 artırır (Balans = 110)
    t4 Balansı 20 artırır (Balans = 120)
    t5 Dəyişiklikləri təsdiqləyir (Balans 110 olur)
    t6 Dəyişiklikləri təsdiqləyir (Balans 120 olur)

    Nəticə: İki artımdan sonra, son Balans dəyəri 120 olur, 130 deyil. Birinci tranzaksiyanın artımı itirilib.

  2. Qarışıq oxuma (Dirty Read): Bir tranzaksiya digərinin təsdiqlənməmiş dəyişikliklərini oxuyur. Əgər dəyişiklik edən tranzaksiya geri alınsa, oxunan məlumatlar etibarsız olacaq.

    Vaxt Tranzaksiya 1 Tranzaksiya 2
    t1 Balansı dəyişir (100 -> 110)
    t2 Balansı oxuyur (110 alır)
    t3 Dəyişikliyi geri alır (Balans 100-ə qayıdır)
    t4 Balansı 110 kimi istifadə edir, halbuki əsl dəyər 100-dir

    Nəticə: Tranzaksiya 2, yekun olaraq təsdiqlənməyən məlumatlara əsaslanır.

  3. Təkrarlanmayan oxuma (Non-Repeatable Read): Eyni tranzaksiya daxilində eyni sətiri təkrar oxuyarkən fərqli dəyərlər alınır, çünki başqa bir tranzaksiya həmin sətirdə dəyişiklik edib və təsdiqləyib.

    Vaxt Tranzaksiya 1 Tranzaksiya 2
    t1 Balansı oxuyur (100 alır)
    t2 Balansı 110-ə dəyişir və təsdiqləyir
    t3 Yenidən oxuyur (110 alır, əvvəlki 100 deyil)

    Nəticə: Balans eyni tranzaksiya daxilində dəyişib, bu isə düzgün olmayan nəticələrə səbəb ola bilər.

  4. Fantom oxuma (Phantom Read): Təkrarlanan oxuma kimi görünür, amma burada mövcud sətirlərin dəyişdirilməsi deyil, yeni sətirlərin əlavə olunması və ya silinməsi ilə əlaqədardır və bu, sorğunun nəticələrinə təsir edir.

    Vaxt Tranzaksiya 1 Tranzaksiya 2
    t1 SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' sorğusunu icra edir (5 alır)
    t2 Yeni 'Pending' statuslu sifariş əlavə edir və təsdiqləyir
    t3 Yenidən SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' icra edir (6 alır)

    Nəticə: Təkrarlanan sorğu icrası zamanı "fantom" sətirlər görünür, ilk oxuma zamanı yox idi.

Bu anomaliyaların qarşısını almaq üçün müxtəlif tranzaksiya izolyasiya səviyyələrindən istifadə olunur.