2.1 Read uncommitted
“Transaksiyalarni izolyatsiya qilish darajasi” deganda transaksiyalarni parallel bajarilishi natijasida kelib chiqadigan ma'lumotlar nomuvofiqligidan himoya qilish darajasi tushuniladi. Bu himoya DBMS-ning ichki mexanizmlari orqali hech qanday qo'shimcha dasturlashsiz ta'minlanadi. SQL-92 standarti to'rtta izolyatsiya darajasini belgilaydi.
- Read uncommitted
- Read committed
- Repeatable read
- Serializable
Bu izolyatsiya darajasini amalga oshirishning oddiy usuli - ma'lumotlarni o'zgartirish vaqtida bloklashdir. Bu shuni anglatadiki, bir xil ma'lumotlarni bir vaqtning o'zida o'zgartirish ketma-ket amalga oshiriladi va hech bir o'zgarish yo'qolmaydi. Shuningdek, faqat o'qishni amalga oshiruvchi transaksiyalar bu izolyatsiya darajasida hech qachon bloklanmaydi.
2.2 Read committed
Ko'pgina sanoat DBMS-lari, jumladan Microsoft SQL Server, PostgreSQL va Oracle, odatda yakunlangan o'qishni qo'llaydi. Bu noto'g'ri o'qishdan himoya qiladi, lekin boshqa transaksiyalar muvaffaqiyatli yakunlanishi va o'zgarishlarni qo'llashlari mumkin. Shuning uchun birinchi transaksiya turli ma'lumotlar to'plami bilan ishlaydi.
Yakunlangan o'qish blokirovka yoki versiyalashtirish yordamida amalga oshirilishi mumkin.
O'qilayotgan va o'zgartirilayotgan ma'lumotlarni bloklash.
Yozuvchi transaksiya, agar ma'lumotlar read committed yoki undan yuqori izolyatsiya darajasi bilan o'qilayotgan bo'lsa, o'zgartirilishi mumkin bo'lgan ma'lumotlarni bloklaydi. Bu ma'lumotlar noto'g'ri yoki to'liq bo'lmagan ko'rinishda o'qilishi mumkin bo'lgan holatni, ya'ni "iflos o'qishni" oldini olishga imkon beradi. Shunday qilib, yozuvchi transaksiyani boshqalar tomonidan o'qilgan ma'lumotlar haqiqatan bloklangan yozuv ma'lumotlariga mos ekanligiga ishonch hosil qilishi mumkin. Shuningdek, o'qiydigan transaksiyalar tomonidan bloklangan ma'lumotlar SELECT operatsiyasi bajarilgandan so'ng avtomatik ravishda bo'shatiladi. Ammo bu holatda ma'lumotlar ikki transaksiyalar uchun bir xil bo'lmasligi mumkin. Ammo bu ma'lumotlar bazasidagi nomuvofiq ma'lumotlar tufayli xatolarni paydo bo'lishini oldini olish imkonini beradi.
Bir necha versiyani bir vaqtda o'zgartirilayotgan satrlarni saqlash.
Har bir satrni o'zgartirganda DBMS ushbu satrning yangi versiyasini yaratadi. Ma'lumotlarni o'zgartirgan transaksiya yangi versiya bilan ishlashda davom etadi, boshqa "o'quvchi" transaksiyalar esa oxirgi tasdiqlangan versiyani olishadi. Bu yondashuv katta tezlik bilan ta'minlaydi, chunki blokirovkalarni yo'q qiladi. Biroq, bu satrlarning versiyalarini saqlash uchun ko'proq xotira sarflashni talab qiladi. Bir necha transaksiyalar bir vaqtda ma'lumotlarni o'zgartirishga harakat qilganda, o'zgarishlar nomuvofiq bo'lishi mumkin bo'lgan holat yuzaga kelishi mumkin. Shunda birinchi bo'lib tasdiqlangan transaksiya o'zgarishlarni saqlaydi. Qolganlari tasdiqlanmaydi va DBMS ularni bekor qiladi, natijada "Yozuv allaqachon o'zgartirilgan" xabarini yuboradi.
DBMS ishlab chiquvchilari amalga oshirish usulini tanlaydilar va parametrlarni sozlashlari mumkin. Masalan, MS SQL odatda blokirovkalarni ishlatadi, lekin 2005 va undan yuqori versiyalarida READ_COMMITTED_SNAPSHOT parametrini o'rnatish mumkin. Oracle versiyalarshtirish sxemasi bilan ishlaydi. Informix-da 11.1 versiyasida USELASTCOMMITTED parametri yordamida o'quv va yozuvchi transaksiyalar orasidagi mojarolarni oldini olish mumkin, bu orqali o'quv transaksiyasi oxirgi tasdiqlangan ma'lumotlarni oladi.
2.3 Repeatable read
“Ko'rinmaslik” darajasi - bu transaksiya ilgari o'qigan ma'lumotlarni o'zgarishlarini "ko'rmaydigan" darajadagi darajadir. Bunday holda, boshqa transaksiya ayni paytda o'qilayotgan ma'lumotlarga zarar etkaza olmaydi, tranzaksiya tugamaguncha. Shunday qilib, ma'lumotlar har qanday ruxsatsiz o'zgarishlar va buzilishlardan ishonchli himoyalanadi.
Transaksiya buyruqlarini bajarishda olinadigan barcha ma'lumotlarga blokirovkalar qo'llaniladi. Bu boshqa transaksiyalarni bu ma'lumotlarni o'zgartirishni oldini oladi, tranzaksiya tugamaguncha. Biroq, boshqa transaksiyalar mavjud bo'lgan holatlarda yangi ma'lumotlar qo'shish imkoniyatiga ega. Tranzaksiya buyruqlarini takroran bajarganda yangi ma'lumotlar olinadi, bu esa fantom o'qishni keltirib chiqarishi mumkin.
Blokirovkalar tranzaksiya tugamaguncha saqlanadi, har bir qadamdan so'ng emas. Bu READ COMMITTED izolyatsiya darajasiga nisbatan parallelizmini kamaytiradi. Ushbu daraja va undan yuqori darajadagi tranzaksiyalarni zarur bo'lmaganda ishlatmaslik yaxshi.
2.4 Serializable
Eng yuqori izolyatsiya darajasi. Transaksiyalar bir-biridan to'liq izolyatsiya qilingan. Har biri go'yo parallel tranzaksiyalar yo'qdek amalga oshiriladi. Faqat ushbu darajada parallel transaksiyalar "fantom o'qishi" ta'siriga uchramaydi.
2.5 Haqiqiy DBMS-da izolyatsiyani qo'llab-quvvatlash
DBMS-lar doimiy ravishda barcha to'rtta darajani qo'llab-quvvatlamaydi va qo'shimcha funksiyalarga ega bo'lishi mumkin. Ba'zilarda xilma-xil izolyatsiya qo'llab-quvvatlanishi mumkin.
Oracle aslida nol transaksion izolyatsiya darajasini qo'llab-quvvatlamaydi, chunki uning amalga oshirilishi "iflos o'qishni" rad etadi. Rasmiy ravishda Repeatable read darajasi qo'llab-quvvatlanmaydi. Faqat Read committed (standart) va Serializable qo'llab-quvvatlanadi.
Oracle alohida buyruqlarni takrorlanishini kafolatlaydi. Masalan, birinchi transaksiya bazadan satrlar to'plamini tanlasa, parallel ikkinchi transaksiya ushbu satrlarning ba'zilarini o'zgartirsa, birinchi transaksiya tomonidan olingan natijalar to'plami o'zgarmagan satrlarni o'z ichiga oladi. Shuningdek, Oracle READ-ONLY transaksiyalarini qo'llab-quvvatlaydi, ular Serializable ga mos keladi, lekin ma'lumotlarni o'zgartirish imkoniyati yo'q.
Microsoft SQL Server transaksiyalar izolyatsiyasining to'rtta darajasini qo'llab-quvvatlaydi. Ularning orqasidan yana bir daraja - SNAPSHOT keladi. Bu transaksiya bajarilishidan oldin ma'lumotlar holatini ko'rishga imkon beradi. Serializable dan farqi shundaki, transaksiya xato chaqirishi mumkin, agar boshqa transaksiya avvalroq bir xil ma'lumotlarda o'zgartirishlarni amalga oshirgan bo'lsa. Bunda COMMIT ni bajarish mumkin bo'lmaydi.
GO TO FULL VERSION