JavaRush /Kurslar /All lectures for UZ purposes /Parallel tranzaksiyalar muammolari

Parallel tranzaksiyalar muammolari

All lectures for UZ purposes
Daraja, Dars
Mavjud

1.1 Kirish

Endi tranzaksiyalar ishlash nazariyasi haqida gaplashamiz. Agar ma'lumotlar turli oqimlarda o'zgartirilayotgan bo'lsa, tizim butunligini qanday saqlash mumkin? Bir tranzaksiyani ikkinchisida qanday bajarish kerak? Bu savollarga javob topish uchun, tranzaksiyalarning izolyatsiya darajasini o'rganishni boshlaymiz.

Tranzaksiyalar izolyatsiya darajasi - bu ma'lumotlar bazasidagi parallel tranzaksiyalarning mantiqiy ravishda bir-biriga qanchalik yaqin kelishi mumkinligini ko'rsatadigan raqam. Tranzaksiyalar izolyatsiya darajalari kichikdan kattaga qarab tartiblangan sonlar to'plami orqali ifodalanadi; izolyatsiya darajasi qanchalik yuqori bo'lsa, ma'lumotlar konsistentligi shunchalik yaxshi bo'ladi, lekin bu parallel ravishda bajariladigan tranzaksiyalar sonining kamayishiga olib kelishi mumkin.

Pastroq izolyatsiya darajasi ko'proq parallel tranzaksiyalarni bajarishga imkon beradi, lekin ma'lumotlar aniqligini pasaytiradi. Shuning uchun, ma'lumotlar tizimi yaratuvchisi izolyatsiya darajasini tanlayotganda, ishlash tezligi va ma'lumotlar konsistentligini ta'minlash o'rtasida qaror qilishi kerak.

Tranzaksiyalarni ishlatish orqali parallel kirish muammolari

Tranzaksiyalar bir vaqtning o'zida bajarilganda quyidagi muammolar paydo bo'lishi mumkin:

  • yo'qotilgan yangilanish — bu bir nechta tranzaksiyalar bir vaqtning o'zida bitta ma'lumot blokini o'zgartirganda sodir bo'ladi. So'nggi o'zgartirishdan tashqari barcha o'zgartirishlar yo'qoladi.
  • "kir" o'qish — bu keyinchalik bekor qilingan biror tranzaksiya tomonidan qo'shilgan yoki o'zgartirilgan ma'lumotlarni o'qishdir.
  • takrorlanmaydigan o'qish — bir tranzaksiyada qayta o'qish vaqtida oldin o'qilgan ma'lumotlar o'zgartiriladi.
  • fantom o'qish (inglizcha phantom reads) — bir tranzaksiya bir necha marta bir xil mezonlarga ko'ra qat'iy ma'lumotlar to'plamini tanlaydi. Boshqa tranzaksiya orasida qatorlarni qo'shadi yoki ustunlarni o'zgartiradi va muvaffaqiyatli yakunlanadi. Natijada, birinchi tranzaksiyada bir xil tanlovlar har xil qatorlar to'plamini beradi.

Bu muammolar yuzaga kelishi mumkin bo'lgan vaziyatlarni ko'rib chiqamiz.

1.2 Yo'qotilgan yangilanish

Bir vaqtning o'zida bir necha tranzaksiyalar tomonidan bitta ma'lumot blokini o'zgartirganda bir o'zgartirish yo'qoladi.

Faraz qilaylik, bir vaqtning o'zida bajarilgan ikkita tranzaksiya mavjud:

Transaction 1 Transaction 2
UPDATE tbl1 SET f2=f2+20 WHERE f1=1; UPDATE tbl1 SET f2=f2+25 WHERE f1=1;

Ikkita tranzaksiya f2 maydonining qiymatini o'zgartiradi. Yakunlangandan so'ng qiymat 45 ga oshiriladi. Harakatlar quyidagi tartibda amalga oshiriladi:

  1. Ikkala tranzaksiya maydonning joriy holatini o'qir. Jismoniy jihatdan bir vaqtda bajarilishi shart emas. Yetarli darajada, keyingi o'qish amali boshqa tranzaksiya o'z natijalarini yozishdan oldin tugallanishi kerak. Bu holda, ikkala tranzaksiya bir vaqtning o'zida bir xil maydondan foydalanishi mumkin va qarama-qarshiliklar yuzaga kelmaydi.
  2. Ikkala operatsiya maydon qiymatini oldingi o'qilgan qiymatga mos ravishda 20 va 25 qo'shib oshiradi.
  3. Tranzaksiyalar f2 ga hisoblash natijasini yozishga harakat qiladi. Ammo cheklovlar tufayli, ikki yozuv bir vaqtning o'zida amalga oshirilishi mumkin emas. Natijada, bir yozuv kamroq ishlab chiqiladi, boshqa yozuv esa kechroq. Ammo ikkinchi yozuv birinchisining natijasini yo'q qiladi, shu bilan birinchisining natijasini qayta yozadi.

Ikkala tranzaksiya tugallangandan so'ng, f2 maydoni qiymati rejalashtirilganday 45 nafariga oshmasligi mumkin, balki 20 yoki 25 nafari ko'p. Shunday qilib, ma'lumotlarni o'zgartiruvchi tranzaksiyalardan biri yo'qoladi, ammo bu amaliyotning zaruriyati saqlanib qoladi va f2 maydoni qiymati kutilgandan ko'progiga o'zgartirilishi mumkin.

1.3 «Kir» o'qish

Tranzaksiyalar tomonidan qo'shilgan yoki o'zgartirilgan, ammo keyinchalik bekor qilingan ma'lumotlarni o'qish.

Faraz qilaylik, ikkita tranzaksiya mavjud bo'lib, ular boshqa dasturlar tomonidan ishga tushirilgan. Ularda quyidagi SQL buyruqlari bajarilgan:

Transaction 1 Transaction 2
UPDATE tbl1 SET f2=f2+1 WHERE f1=1;
SELECT f2 FROM tbl1 WHERE f1=1;
ROLLBACK WORK;

Tranzaksiya 1 da f2 maydoni o'zgartiriladi, keyin tranzaksiya 2 da bu qiymat chiqariladi. Buning natijasida tranzaksiya 1 teskari qilinganidan so'ng, tranzaksiya 2 tomonidan olingan qiymat, ma'lumotlar bazasida saqlanadigan qiymatdan farqli bo'ladi.

1.4 Takrorlanmaydigan o'qish

Qayta o'qilganida ma'lumotlar o'zgartirilgan. Misol uchun, ikki dastur o'zaro turli tranzaksiyalarni ochib, quyidagi SQL buyruqlarini ishga tushiradi:

Transaction 1 Transaction 2
SELECT f2 FROM tbl1 WHERE f1=1;
UPDATE tbl1 SET f2=f2+3 WHERE f1=1;
COMMIT;
SELECT f2 FROM tbl1 WHERE f1=1;

Tranzaksiya 2 da f2 maydonidan qiymat tanlanadi. Keyin tranzaksiya 1 da f2 maydoni qiymati o'zgartiriladi. Tranzaksiya 2 da f2 maydonidan qayta tanlanganida boshqa natija olish mumkin. Bu muammoli, chunki ma'lumotlar o'qib olinganda, ular qisman o'zgartirilishi va ma'lumotlar bazasiga qayta yozilishi uchun olinadi.

1.5 «Fantom» o'qish

Bitta tranzaksiya ichida bir xil tanlov bir necha marta har xil natija berishi bu vaziyat deb ataladi. Bunday vaziyatning misoli quyidagicha bo'lishi mumkin: Ikkita tranzaksiya, turli dasturlar tomonidan ochilgan, bir xil SQL buyruqlarini bajaradi.

Transaction 1 Transaction 2
SELECT SUM(f2) FROM tbl1;
INSERT INTO tbl1 (f1,f2) VALUES (15,20);
COMMIT;
SELECT SUM(f2) FROM tbl1;

Tranzaksiya 2 da SQL buyruqlari, f2 maydonining barcha qiymatlarini ishlatadigan bajariladi. Keyin tranzaksiya 1 da yangi qator qo'shiladi. Shundan so'ng, agar tranzaksiya 2 da o'sha SQL buyrug'ini qayta bajarsa, boshqa natija olinadi. Bu holat "fan" o'qish deb nomlanadi. U oddiy o'qishdan farq qiladi, chunki natijaning o'zgarishi eski ma'lumotlar o'zgarishi/o'chirilishi tufayli emas, balki yangi (fantom) ma'lumotlarning paydo bo'lishi tufayli yuzaga keladi.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION