Sobes.tech
Middle+

Paralel tranzaktsiyalar bajarilayotganda qanday anomaliyalar yuzaga kelishi mumkin?

sobes.tech AI

AIdan javob

Bir vaqtning o'zida bajarilayotgan tranzaktsiyalar davomida quyidagi anomaliyalar yuzaga kelishi mumkin:

  1. Yo'qotilgan yangilash (Lost Update): Bir tranzaksiya, boshqa tranzaksiya o'zgartirishlarini tasdiqlashdan oldin yozib oladi.

    Vaqt Tranzaksiya 1 Tranzaksiya 2
    t1 Balans qiymatini o'qiydi (masalan, 100)
    t2 Balans qiymatini o'qiydi (masalan, 100)
    t3 Balansni 10 ga oshiradi (Balans = 110)
    t4 Balansni 20 ga oshiradi (Balans = 120)
    t5 O'zgarishlarni tasdiqlaydi (Balans 110 bo'ladi)
    t6 O'zgarishlarni tasdiqlaydi (Balans 120 bo'ladi)

    Natija: Ikki oshirishga qaramay, oxirgi Balans qiymati 120, 130 emas. Birinchi tranzaksiya yangilanishi yo'qolgan.

  2. Nopok o'qish (Dirty Read): Bir tranzaksiya, boshqa tranzaksiya tasdiqlamagan o'zgarishlarni o'qiydi. Agar o'zgarishlarni qilgan tranzaksiya bekor qilinsa, o'qilgan ma'lumotlar yaroqsiz bo'ladi.

    Vaqt Tranzaksiya 1 Tranzaksiya 2
    t1 Balansni o'zgartirishni boshlaydi (100 -> 110)
    t2 Balansni o'qiydi (110 oladi)
    t3 O'zgarishni bekor qiladi (balans 100 ga qaytadi)
    t4 Balans = 110 ni hisoblashlarda ishlatadi, asl qiymat 100 bo'lsa ham

    Natija: Ikkinchi tranzaksiya, oxir-oqibat tasdiqlanmagan ma'lumotlarga asoslangan.

  3. Takrorlanmaydigan o'qish (Non-Repeatable Read): Bir tranzaksiya davomida, ayni satrni qayta o'qish, boshqa tranzaksiya bu satrga o'zgartirish kiritgan bo'lsa, turli qiymatlarni beradi.

    Vaqt Tranzaksiya 1 Tranzaksiya 2
    t1 Balansni o'qiydi (100)
    t2 Balansni 110 ga o'zgartiradi va tasdiqlaydi
    t3 Balansni yana o'qiydi (110, 100 kutilganidek)

    Natija: Balans, bir tranzaksiya ichida o'zgargan, noto'g'ri natijalarga olib kelishi mumkin.

  4. Hayvon o'qishi (Phantom Read): Takrorlanmaydigan o'qishga o'xshaydi, lekin mavjud satrlarni qo'shish yoki o'chirish bilan bog'liq va so'rov natijalariga ta'sir qiladi.

    Vaqt Tranzaksiya 1 Tranzaksiya 2
    t1 SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' so'rovini bajaradi (5 oladi)
    t2 'Pending' statusiga ega yangi buyurtma qo'shadi va tasdiqlaydi
    t3 SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' ni qayta bajaradi (6 oladi)

    Natija: So'rovni qayta bajarishda, birinchi o'qishda bo'lmagan "hayvon" satrlar paydo bo'ladi.

Ushbu anomaliyalar, turli izolatsiya darajalaridan foydalanish orqali oldini olinadi.