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