Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Hammaga salom. Vladislav Rodin aloqada. Men hozirda OTUSda “Yuqori yuk arxitektori” kursi bo‘yicha kurs rahbariman va dasturiy ta’minot arxitekturasi kurslarini ham o‘rgataman.

O'rgatishdan tashqari, siz sezganingizdek, men Habré-dagi OTUS blogi uchun original material yozyapman va kursning boshlanishi bilan bugungi maqolaga to'g'ri kelmoqchiman. "PostgreSQL", hozir ro'yxatdan o'tish uchun ochiq.

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

kirish

В So'nggi marta biz ma'lumotlar bazalaridagi tranzaktsiyalar ikkita muammoni hal qilishga xizmat qilishi haqida gapirdik: xatolarga chidamlilikni ta'minlash va raqobat muhitida ma'lumotlarga kirish. Ushbu vazifalarni to'liq bajarish uchun tranzaksiya ACID xususiyatlariga ega bo'lishi kerak. Bugun biz maktub haqida batafsil gaplashamiz I (izolyatsiya) bu qisqartmada.

Izolyatsiya

Izolyatsiya raqobat muhitida ma'lumotlarga kirish muammosini hal qiladi, asosan irq sharoitidan himoya qiladi. Ideal holda, izolyatsiya ketma-ketlashtirishni anglatadi, bu parallel ravishda operatsiyalarni bajarish natijasi ular ketma-ket bajarilgandek bir xil bo'lishini ta'minlaydigan xususiyatdir. Ushbu mulk bilan bog'liq asosiy muammo shundaki, uni texnik jihatdan ta'minlash juda qiyin va buning natijasida tizimning ishlashiga sezilarli ta'sir ko'rsatadi. Shuning uchun izolyatsiya ko'pincha zaiflashadi, ba'zi anomaliyalar xavfini qabul qiladi, ular quyida muhokama qilinadi. Muayyan anomaliyalarning yuzaga kelish ehtimoli tranzaktsiyalarni izolyatsiya qilish darajasini aniq tavsiflaydi.

Eng mashhur anomaliyalar quyidagilardir: iflos o'qish, takrorlanmaydigan o'qish, xayoliy o'qish, lekin aslida yana 5 tasi bor: iflos yozish, kursorni yangilash yo'qolgan, yangilanish yo'qolgan, o'qish egri, yozish egri.

Nopok yozish

Anomaliyaning mohiyati shundan iboratki, tranzaktsiyalar bajarilmagan ma'lumotlarni qayta yozishi mumkin.

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Bu anomaliya nafaqat ikkala tranzaktsiyani amalga oshirgandan so'ng (rasmdagi kabi) ma'lumotlar ziddiyatli bo'lishi mumkinligi sababli, balki atomiklik buzilganligi uchun ham xavflidir: biz tasdiqlanmagan ma'lumotlarni qayta yozishga ruxsat berganimiz sababli, boshqasiga ta'sir qilmasdan bir tranzaksiyani qanday qaytarish kerakligi aniq emas. .

Anomaliyani juda oddiy hal qilish mumkin: biz yozuvni yozishni boshlashdan oldin qulfni biriktiramiz, qulf olib tashlanmaguncha boshqa operatsiyalarga yozuvni o'zgartirishni taqiqlaymiz.

Nopok o'qish

Nopok o'qish, o'qilmagan ma'lumotlarni o'qishni anglatadi.

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Namuna asosida harakatlar yoki qarorlar qabul qilish kerak bo'lganda muammolar paydo bo'ladi.

Anomaliyani tuzatish uchun siz o'qish qulfini ulashingiz mumkin, ammo bu ishlashga katta ta'sir qiladi. Tranzaktsiyani orqaga qaytarish uchun ma'lumotlarning dastlabki holati (yozuv boshlanishidan oldin) tizimda saqlanishi kerakligini aytish ancha sodda. Nega u yerdan o'qimaysiz? Ko'pgina ma'lumotlar bazalari sukut bo'yicha iflos o'qishni olib tashlaydigan darajada arzon.

Yo'qotilgan yangilanish

Yo'qotilgan yangilanish yo'qolgan yangilanishlarni anglatadi va tarjima muammoning mohiyatini juda aniq aks ettiradi:

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Aslida, T2 tranzaksiya natijasi teskari bo'ldi. Bu holat aniq yoki yashirin yozish blokirovkalari bilan tuzatilishi mumkin. Ya'ni, biz oddiygina yozuvni yangilaymiz, keyin esa yashirin blokirovka sodir bo'ladi yoki biz bajaramiz yangilash uchun tanlang, o'qish va yozish blokirovkasining paydo bo'lishiga olib keladi. E'tibor bering, bunday operatsiya juda xavflidir: "aybsiz" o'qishimiz bilan biz boshqa o'qishlarni bloklaymiz. Ba'zi ma'lumotlar bazalari yanada xavfsizroqdir almashish uchun tanlang, ma'lumotlarni o'qishga ruxsat beradi, lekin o'zgartirilmaydi.

Kursor yangilanishni yo'qotdi

Yaxshiroq boshqarish uchun bazalar kursor kabi boshqa vositalarni taklif qilishi mumkin. Kursor - bu qatorlar to'plamini o'z ichiga olgan va ularni takrorlash imkonini beruvchi tuzilma. select_statement uchun kursor_nomini e'lon qiling. Kursorning mazmuni tanlash orqali tavsiflanadi.

Nega sizga kursor kerak? Gap shundaki, ba'zi ma'lumotlar bazalari tanlash (o'qish barqarorligi) yoki faqat kursor joylashgan yozuvda (kursor barqarorligi) tanlangan barcha yozuvlarni bloklashni taklif qiladi. Kursor barqarorligi bilan qisqa bloklash amalga oshiriladi, bu bizga ma'lumotlarning katta namunasi bo'yicha takrorlanadigan bo'lsak, qulflar sonini kamaytirishga imkon beradi. Shuning uchun, yo'qolgan yangilanish anomaliyasi kursor uchun alohida ajratilgan.

Takrorlab bo'lmaydigan o'qish

Takrorlanmaydigan o'qish - bu bizning tranzaksiyamizni amalga oshirish jarayonida bir xil yozuvning ketma-ket 2 marta o'qilishi turli natijalarga olib keladi, chunki bu ikki o'qish orasiga boshqa tranzaksiya aralashib, ma'lumotlarimizni o'zgartirdi va amalga oshirildi.

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Nega bu hatto muammo? Tasavvur qiling-a, rasmdagi T2 tranzaksiyasining maqsadi narxi 150 AQSh dollaridan past bo'lgan barcha tovarlarni tanlashdir. Yana kimdir narxni 200 dollarga yangiladi. Shunday qilib, o'rnatilgan filtr ishlamadi.

Ushbu anomaliyalar ikki fazali blokirovkalar qo'shilganda yoki MVCC mexanizmi ishlatilganda to'xtaydi, men buni alohida muhokama qilmoqchiman.

Fantom o'qish

Phantom - bu boshqa tranzaksiya orqali qo'shilgan ma'lumotlarni o'qish.

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Misol tariqasida, bu anomaliya yuzaga kelganda, biz eng arzon mahsulotni noto'g'ri tanlashni kuzatishimiz mumkin.

Fantom o'qishlardan xalos bo'lish allaqachon juda qiyin. Muntazam blokirovka qilishning o'zi etarli emas, chunki biz hali mavjud bo'lmagan narsani bloklay olmaymiz. 2PL tizimlari bashoratli qulflashni qo'llaydi, MVCC tizimlari esa qo'shimchalar bilan uzilishi mumkin bo'lgan tranzaktsiyalarni orqaga qaytaradigan tranzaksiya rejalashtiruvchisiga ega. Birinchi va ikkinchi mexanizmlar juda og'ir.

Burilishni o'qing

O'qishning egriligi biz bir nechta jadvallar bilan ishlaganimizda yuzaga keladi, ularning mazmuni doimiy ravishda o'zgarishi kerak.

Aytaylik, bizda postlar va ularning meta-ma'lumotlarini ifodalovchi jadvallar mavjud:

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Bitta tranzaksiya jadvallardan o'qiydi, ikkinchisi ularni o'zgartiradi:

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

T1 tranzaksiyasi natijasida post sarlavha = Yaxshi va updated_by = T2 ga ega, bu qandaydir nomuvofiqlikdir.

Aslida, bu takrorlanmaydigan o'qish, lekin bir nechta jadvallarning bir qismi sifatida.

Buni tuzatish uchun T1 o'qiydigan barcha qatorlarga qulflar qo'yishi mumkin, bu esa T2 tranzaksiyasining ma'lumotni o'zgartirishiga to'sqinlik qiladi. MVCC bo'lsa, T2 tranzaksiyasi bekor qilinadi. Agar kursorlardan foydalansak, bu anomaliyadan himoya qilish muhim bo'lishi mumkin.

Burilishni yozing

Bu anomaliyani misol bilan tushuntirish ham osonroq: deylik, bizning tizimimizda kamida bitta shifokor navbatchilik qilishi kerak, ammo ikkala shifokor ham o'z vazifalarini bekor qilishga qaror qilishdi:

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Anomaliya shifokorlarning hech biri navbatchilik qilmasligini anglatardi. Nima uchun bu sodir bo'ldi? Chunki tranzaksiya boshqa tranzaksiya tomonidan buzilishi mumkin bo'lgan shartni tekshirayotgan edi va izolyatsiya tufayli biz bu o'zgarishni ko'rmadik.

Bu bir xil takrorlanmaydigan o'qish. Shu bilan bir qatorda, tanlanganlar ushbu yozuvlarga qulf qo'yishi mumkin.

Yozish qiyshagi va o‘qish qiyshiqligi oldingi anomaliyalarning birikmasidir. Siz yozish qiyshiqligini ko'rib chiqishingiz mumkin, bu aslida xayoliy o'qishdir. Xodimlarning ismlari, maoshlari va ular ustida ishlayotgan loyihani o'z ichiga olgan jadvalni ko'rib chiqing:

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Ma'lumotlar bazalarida tranzaktsiyalarni izolyatsiya qilish darajasini zaiflashtirish nimaga olib kelishi mumkin?

Natijada, biz quyidagi rasmga ega bo'lamiz: har bir menejer o'z o'zgarishi byudjetni oshirib yuborishga olib kelmaydi deb o'ylagan, shuning uchun ular birgalikda xarajatlarning oshishiga olib keladigan xodimlarni o'zgartirishgan.

Muammoning sababi fantom o'qish bilan bir xil.

topilmalar

Ma'lumotlar bazasida tranzaksiya izolyatsiyasi darajasini yumshatish xavfsizlik va samaradorlik o'rtasidagi kelishuvdir; bu darajani tanlashga, agar ma'lum anomaliyalar yuzaga kelsa, biznes uchun potentsial xavflardan kelib chiqqan holda yondashish kerak.

Kurs haqida ko'proq bilib oling.

Manba: www.habr.com

a Izoh qo'shish