Bitimlar va ularni boshqarish mexanizmlari

Jurnallar

Tranzaksiya - bu boshlanishi va oxiri bo'lgan ma'lumotlar bo'yicha operatsiyalar ketma-ketligi.

Tranzaksiya - bu o'qish va yozish operatsiyalarining ketma-ket bajarilishi. Tranzaktsiyaning oxiri o'zgarishlarni saqlash (majburiyat) yoki o'zgarishlarni bekor qilish (orqaga qaytarish) bo'lishi mumkin. Ma'lumotlar bazasiga nisbatan tranzaktsiya bitta so'rov sifatida ko'rib chiqiladigan bir nechta so'rovlardan iborat.

Tranzaktsiyalar ACID xususiyatlarini qondirishi kerak

Atomlik. Tranzaktsiya to'liq bajariladi yoki umuman bajarilmaydi.

Muvofiqlik. Tranzaktsiyani bajarishda ma'lumotlarga qo'yilgan cheklovlar (masalan, ma'lumotlar bazasidagi cheklovlar) buzilmasligi kerak. Mustahkamlik tizimning bir to'g'ri holatdan boshqa to'g'ri holatga o'tishini anglatadi.

Izolyatsiya. Parallel bajariladigan operatsiyalar bir-biriga ta'sir qilmasligi kerak, masalan, boshqa tranzaksiya tomonidan ishlatiladigan ma'lumotlarni o'zgartirish. Parallel operatsiyalarni bajarish natijasi xuddi operatsiyalar ketma-ket bajarilgandek bir xil bo'lishi kerak.

Barqarorlik. Qabul qilingandan so'ng, o'zgarishlar yo'qolmasligi kerak.

Tranzaksiya jurnali

Jurnal tranzaktsiyalar tomonidan kiritilgan o'zgarishlarni saqlaydi, tizim ishlamay qolganda ma'lumotlarning atomikligi va barqarorligini ta'minlaydi

Jurnal ma'lumotlar tranzaksiya tomonidan o'zgartirilgandan oldin va keyin mavjud bo'lgan qiymatlarni o'z ichiga oladi. Oldindan yozish strategiyasi boshlanishidan oldin oldingi qiymatlar va tranzaksiya tugagandan so'ng yakuniy qiymatlar haqida jurnalga yozuv qo'shishni talab qiladi. Tizim to'satdan to'xtab qolsa, ma'lumotlar bazasi jurnalni teskari tartibda o'qiydi va tranzaktsiyalar tomonidan kiritilgan o'zgarishlarni bekor qiladi. To'xtatilgan tranzaktsiyaga duch kelgandan so'ng, ma'lumotlar bazasi uni amalga oshiradi va bu haqda jurnalga o'zgartirishlar kiritadi. Muvaffaqiyatsizlik vaqtida holatda bo'lgan holda, ma'lumotlar bazasi jurnalni oldinga siljish tartibida o'qiydi va tranzaktsiyalar bo'yicha kiritilgan o'zgarishlarni qaytaradi. Shunday qilib, allaqachon amalga oshirilgan tranzaktsiyalarning barqarorligi va to'xtatilgan tranzaksiyaning atomligi saqlanib qoladi.

Qayta tiklash uchun muvaffaqiyatsiz tranzaktsiyalarni oddiygina qayta bajarish etarli emas.

Misol. Foydalanuvchining hisobida 500 dollar bor va foydalanuvchi uni bankomatdan yechib olishga qaror qiladi. Ikkita tranzaksiya amalga oshirilmoqda. Birinchisi balans qiymatini o'qiydi va agar balansda etarli mablag' bo'lsa, u foydalanuvchiga pul chiqaradi. Ikkinchisi balansdan kerakli miqdorni olib tashlaydi. Aytaylik, tizim qulab tushdi va birinchi operatsiya muvaffaqiyatsiz tugadi, lekin ikkinchisi. Bunday holda, tizimni ijobiy balans bilan asl holatiga qaytarmasdan, foydalanuvchiga pulni qayta chiqara olmaymiz.

Izolyatsiya darajalari

Majburiyatni o'qing

Kirli o'qish muammosi shundaki, tranzaktsiya boshqa tranzaktsiyaning oraliq natijasini o'qiy oladi.

Misol. Balansning dastlabki qiymati $0. T1 balansingizga $50 qo'shadi. T2 balans qiymatini o'qiydi ($50). T1 o'zgarishlarni bekor qiladi va chiqadi. T2 noto'g'ri balans ma'lumotlari bilan ishlashni davom ettiradi.

Yechim tranzaktsiya tomonidan o'zgartirilgan ma'lumotlarni o'qishni taqiqlovchi sobit ma'lumotlarni o'qishdir (Read Committed). Agar A tranzaktsiyasi ma'lum ma'lumotlar to'plamini o'zgartirgan bo'lsa, B tranzaktsiyasi ushbu ma'lumotlarga kirishda A tranzaksiyasi tugashini kutishga majbur bo'ladi.

Takroriy o'qish

Yo'qotilgan yangilanishlar muammosi. T1 o'zgarishlarni T2 o'zgarishlari ustiga saqlaydi.

Misol. Balansning dastlabki qiymati $0 ni tashkil qiladi va bir vaqtning o'zida ikkita tranzaktsiya balansni to'ldiradi. T1 va T2 $ 0 balansini o'qiydi. Keyin T2 $200 ga $0 qo'shadi va natijani saqlaydi. T1 $100 ga $0 qo'shadi va natijani saqlaydi. Yakuniy natija - 100 dollar o'rniga 300 dollar.

Takrorlab bo'lmaydigan o'qish muammosi. Xuddi shu ma'lumotlarni qayta-qayta o'qish turli qiymatlarni qaytaradi.

Misol. T1 $ 0 balans qiymatini o'qiydi. Keyin T2 balansga 50 dollar qo'shadi va tugaydi. T1 ma'lumotlarni qayta o'qiydi va oldingi natija bilan nomuvofiqlikni topadi.

Takrorlanadigan o'qish ikkinchi o'qish bir xil natijani qaytarishini ta'minlaydi. Bitta tranzaksiya bo'yicha o'qilgan ma'lumotlarni tranzaksiya yakunlanmaguncha boshqalarida o'zgartirib bo'lmaydi. Agar A tranzaktsiyasi ma'lum ma'lumotlar to'plamini o'qigan bo'lsa, B tranzaktsiyasi ushbu ma'lumotlarga kirishda A tranzaksiyasi tugashini kutishga majbur bo'ladi.

Buyurtmali o'qish (seriyalash mumkin)

Phantom Reads muammosi. Muayyan shart asosida ma'lumotlarni tanlaydigan ikkita so'rov turli qiymatlarni qaytaradi.

Misol. T1 balansi $0 dan ortiq, lekin $100 dan kam bo'lgan barcha foydalanuvchilar sonini so'raydi. T2 $ 1 balansi bo'lgan foydalanuvchidan $ 101 chegirib tashlaydi. T1 so'rovni qayta chiqaradi.

Buyurtmali o'qish (seriyalash mumkin). Bitimlar to'liq ketma-ketlikda amalga oshiriladi. So'rov shartlariga to'g'ri keladigan yozuvlarni yangilash yoki qo'shish taqiqlanadi. Agar A tranzaktsiyasi butun jadvaldan ma'lumotlarni so'ragan bo'lsa, u holda A tranzaksiyasi tugaguniga qadar butun jadval boshqa tranzaktsiyalar uchun muzlatiladi.

Rejalashtiruvchi

Parallel operatsiyalar paytida operatsiyalarni bajarish tartibini belgilaydi.

Belgilangan darajadagi izolyatsiyani ta'minlaydi. Agar amallarning natijasi ularning tartibiga bog'liq bo'lmasa, unda bunday operatsiyalar kommutativdir (O'zgaruvchan). Turli ma'lumotlar ustida o'qish operatsiyalari va operatsiyalari kommutativdir. O'qish-yozish va yozish-yozish operatsiyalari kommutativ emas. Reja tuzuvchining vazifasi parallel operatsiyalar orqali bajariladigan operatsiyalarni bajarish natijasi tranzaktsiyalarning ketma-ket bajarilishiga teng bo'lishi uchun bir-biriga qo'shishdir.

Parallel ishlarni boshqarish mexanizmlari (Concurrency Control)

Optimistik nizolarni aniqlash va hal qilishga asoslangan, pessimistik nizolar kelib chiqishining oldini olishga asoslangan.

Optimistik yondashuvda bir nechta foydalanuvchilarning ixtiyorida ma'lumotlarning nusxalari mavjud. Tahrirlashni tugatgan birinchi shaxs o'zgarishlarni saqlaydi, qolganlari esa o'zgarishlarni birlashtirishi kerak. Optimistik algoritm ziddiyat yuzaga kelishiga imkon beradi, lekin tizim ziddiyatdan tiklanishi kerak.

Pessimistik yondashuv bilan ma'lumotni birinchi bo'lib qo'lga kiritgan foydalanuvchi boshqalarning ma'lumotlarni olishiga to'sqinlik qiladi. Agar mojarolar kamdan-kam bo'lsa, optimistik strategiyani tanlash oqilona bo'ladi, chunki u yuqori darajadagi parallellikni ta'minlaydi.

Qulflash

Agar bitta tranzaktsiyada ma'lumotlar bloklangan bo'lsa, boshqa tranzaktsiyalar ma'lumotlarga kirishda uning qulfdan chiqarilishini kutishlari kerak.

Blok ma'lumotlar bazasi, jadval, qator yoki atribut ustiga qo'yilishi mumkin. Shared Lock bir xil ma'lumotlarga bir nechta tranzaktsiyalar orqali o'rnatilishi mumkin, barcha tranzaktsiyalarni (shu jumladan, uni o'rnatgan) o'qishga imkon beradi, o'zgartirishni va eksklyuziv ushlashni taqiqlaydi. Eksklyuziv blokirovka faqat bitta tranzaksiya bilan o'rnatilishi mumkin, bitimning har qanday harakatlariga ruxsat beradi, boshqalarning har qanday harakatlarini taqiqlaydi.

Tugallanish - bu tranzaktsiyalar noma'lum muddatga davom etadigan kutilayotgan holatda bo'lgan vaziyat.

Misol. Birinchi tranzaksiya ikkinchisi tomonidan olingan ma'lumotlarning chiqarilishini kutadi, ikkinchisi esa birinchisi tomonidan olingan ma'lumotlarning chiqarilishini kutadi.

Tugallangan muammoning optimistik yechimi o'lik holatini yuzaga keltirishiga imkon beradi, lekin keyin o'lik bilan bog'liq bo'lgan tranzaktsiyalardan birini orqaga qaytarish orqali tizimni tiklaydi.

O'lik qulflar ma'lum vaqt oralig'ida qidiriladi. Aniqlash usullaridan biri vaqt bo'yicha, ya'ni agar tranzaksiyani bajarish uchun juda uzoq vaqt kerak bo'lsa, blokirovka sodir bo'lgan deb hisoblang. Tugallangan vaziyat aniqlanganda, tranzaktsiyalardan biri orqaga qaytariladi, bu esa boshi berk ko'chaga kirgan boshqa tranzaktsiyalarni yakunlash imkonini beradi. Jabrlanuvchini tanlash tranzaktsiyalarning qiymatiga yoki ularning ish stajiga asoslanishi mumkin (Wait-Die va Wound-wait sxemalari).

Har bir tranzaksiya T vaqt tamg'asi belgilanadi TS tranzaktsiyaning boshlanish vaqtini o'z ichiga oladi.

Kuting - o'l.

agar TS(Ti) < TS(Tj)so'ng Ti kutadi, aks holda Ti orqaga qaytariladi va yana bir xil vaqt tamg'asi bilan boshlanadi.

Agar yosh tranzaksiya resursga ega bo'lsa va eski tranzaksiya bir xil resursni so'rasa, eski tranzaksiya kutishga ruxsat etiladi. Agar eski tranzaksiya resursni qo'lga kiritgan bo'lsa, u holda resurs so'ragan yoshroq tranzaksiya qaytarib olinadi.

Yara - kuting.

agar TS(Ti) < TS(Tj)so'ng Tj orqaga qaytariladi va yana bir xil vaqt tamg'asi bilan boshlanadi, aks holda Ti kutish

Agar yoshroq tranzaksiya resursga ega bo'lsa va eski tranzaksiya bir xil resursni so'rasa, yoshroq tranzaksiya orqaga qaytariladi. Agar eski tranzaksiya resursni qo'lga kiritgan bo'lsa, u holda resursni so'ragan yoshroq tranzaksiya kutishga ruxsat beriladi. Ustunlikka asoslangan jabrlanuvchini tanlash blokirovkalarni oldini oladi, lekin qulflanmagan tranzaksiyalarni orqaga qaytaradi. Muammo shundaki, tranzaktsiyalar ko'p marta qaytarilishi mumkin, chunki... eski tranzaksiya resursni uzoq vaqt ushlab turishi mumkin.

Tugallangan muammoning pessimistik yechimi, agar blokirovka xavfi mavjud bo'lsa, tranzaktsiyani amalga oshirishni boshlashga imkon bermaydi.

Tugallangan vaziyatni aniqlash uchun grafik tuziladi (kutish grafigi, kutish grafigi), uning cho'qqilari tranzaktsiyalar bo'lib, qirralari esa ushbu ma'lumotni qo'lga kiritgan tranzaktsiyaga ma'lumotlarning chiqarilishini kutayotgan tranzaktsiyalardan yo'naltiriladi. Agar grafada halqa bo'lsa, boshi berk ko'chaga kirgan deb hisoblanadi. Kutish grafigini qurish, ayniqsa taqsimlangan ma'lumotlar bazalarida, qimmat protsedura hisoblanadi.

Ikki fazali blokirovka - tranzaksiya boshida tranzaksiya tomonidan foydalaniladigan barcha resurslarni tortib olish va oxirida ularni ozod qilish orqali blokirovkalarni oldini oladi.

Barcha blokirovka operatsiyalari birinchi qulfni ochishdan oldin bo'lishi kerak. Uning ikki fazasi bor - o'sish fazasi, bu davrda tutqichlar to'planadi va qisqarish bosqichi, bu davrda tutqichlar bo'shatiladi. Agar resurslardan birini qo'lga kiritishning iloji bo'lmasa, tranzaksiya qaytadan boshlanadi. Tranzaktsiya zarur resurslarni qo'lga kirita olmasligi mumkin, masalan, bir xil resurslar uchun bir nechta bitimlar raqobatlashsa.

Ikki fazali majburiyat barcha ma'lumotlar bazasi replikalarida bajarilishini ta'minlaydi

Har bir ma'lumotlar bazasi jurnalga o'zgartiriladigan ma'lumotlar haqidagi ma'lumotlarni kiritadi va koordinatorga javob beradi OK (Ovoz berish bosqichi). Hamma "OK" deb javob bergandan so'ng, koordinator hammani majburiyatini bajarishga majburlovchi signal yuboradi. Amalga oshirilgandan so'ng, serverlar "OK" deb javob berishadi; agar kamida bittasi "OK" deb javob bermasa, koordinator barcha serverlarga o'zgartirishlarni bekor qilish uchun signal yuboradi (tugatish bosqichi).

Vaqt belgisi usuli

Yoshroq tranzaksiya bilan bog'liq ma'lumotlarga kirishga urinishda eski tranzaksiya orqaga qaytariladi

Har bir tranzaksiyaga vaqt tamg'asi beriladi TS bajarilishning boshlanish vaqtiga to'g'ri keladi. Agar Ti katta Tjso'ng TS(Ti) < TS(Tj).

Tranzaksiya orqaga qaytarilsa, unga yangi vaqt tamg'asi beriladi. Har bir ma'lumot ob'ekti Q tranzaktsiyaga jalb qilingan ikki yorliq bilan belgilanadi. W-TS(Q) — rekordni muvaffaqiyatli yakunlagan eng yosh tranzaksiyaning vaqt tamg'asi Q. R-TS(Q) - o'qish yozuvini amalga oshirgan eng yosh tranzaksiyaning vaqt tamg'asi Q.

Tranzaktsiya qachon T ma'lumotlarni o'qish uchun so'rovlar Q ikkita variant mumkin.

agar TS(T) < W-TS(Q), ya'ni ma'lumotlar yoshroq tranzaksiya, keyin esa tranzaksiya tomonidan yangilangan T orqaga aylanadi.

agar TS(T) >= W-TS(Q), keyin o'qish amalga oshiriladi va R-TS(Q) kelmoqda MAX(R-TS(Q), TS(T)).

Tranzaktsiya qachon T maʼlumotlarni oʻzgartirishni soʻraydi Q ikkita variant mumkin.

agar TS(T) < R-TS(Q), ya'ni ma'lumotlar allaqachon yoshroq tranzaksiya tomonidan o'qilgan va agar o'zgartirish kiritilsa, ziddiyat yuzaga keladi. Tranzaksiya T orqaga aylanadi.

agar TS(T) < W-TS(Q), ya'ni tranzaksiya yangiroq qiymatni qayta yozishga harakat qiladi, T tranzaksiya orqaga qaytariladi. Boshqa hollarda, o'zgartirish amalga oshiriladi va W-TS(Q) tenglashadi TS(T).

Qimmatbaho kutish grafigi qurilishi talab qilinmaydi. Qadimgi tranzaktsiyalar yangilariga bog'liq, shuning uchun kutish grafigida tsikllar mavjud emas. Hech qanday to'siqlar yo'q, chunki tranzaktsiyalar kutilmaydi, lekin darhol orqaga qaytariladi. Kaskadli orqaga qaytarish mumkin. Agar Ti dumalab ketdi va Tj Men o'zgartirgan ma'lumotlarni o'qidim Tiso'ng Tj ham orqaga qaytishi kerak. Agar bir vaqtning o'zida Tj allaqachon sodir etilgan bo'lsa, unda barqarorlik tamoyilining buzilishi bo'ladi.

Kaskadli orqaga qaytish uchun echimlardan biri. Tranzaksiya oxirida barcha yozish operatsiyalarini tugatadi va boshqa tranzaktsiyalar bu operatsiya tugashini kutishi kerak. Tranzaktsiyalar o'qishdan oldin bajarilishini kutadi.

Tomas yozish qoidasi - vaqt tamg'asi usulining o'zgarishi, unda yoshroq tranzaksiya tomonidan yangilangan ma'lumotlarni eskisi tomonidan qayta yozish taqiqlanadi.

Tranzaksiya T maʼlumotlarni oʻzgartirishni soʻraydi Q. agar TS(T) < W-TS(Q), ya'ni tranzaksiya yangiroq qiymatni qayta yozishga harakat qiladi, T tranzaksiya vaqt tamg'asi usulida bo'lgani kabi orqaga qaytarilmaydi.

Manba: www.habr.com

a Izoh qo'shish