Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Здраво свима. Владислав Родин је у контакту. Тренутно сам вођа курса за курс Архитекта високог оптерећења на ОТУС-у и такође предајем курсеве архитектуре софтвера.

Поред предавања, као што сте можда приметили, пишем оригинални материјал за ОТУС блог на Хабреу и желим да се поклопим са данашњим чланком како би се поклопио са покретањем курса "ПостгреСКЛ", који је тренутно отворен за упис.

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Увод

В последњи пут говорили смо о томе да трансакције у базама података служе за решавање два проблема: обезбеђивање толеранције грешака и приступ подацима у конкурентском окружењу. Да би у потпуности извршила ове задатке, трансакција мора имати својства АЦИД. Данас ћемо детаљно говорити о писму ја (изолација) у овој скраћеници.

Изолација

Изолација решава проблем приступа подацима у конкурентском окружењу, у суштини пружајући заштиту од услова расе. У идеалном случају, изолација значи серијализацију, што је својство које осигурава да је резултат паралелног извршавања трансакција исти као да се извршавају секвенцијално. Главни проблем са овим својством је што га је веома тешко технички обезбедити и као резултат тога има значајан утицај на перформансе система. Због тога се изолација често слаби, прихватајући ризике одређених аномалија, о чему ће бити речи у наставку. Могућност настанка одређених аномалија прецизно карактерише ниво изолованости трансакција.

Најпознатије аномалије су: прљаво читање, непоновљиво читање, фантомско читање, али у ствари има још 5: прљаво писање, изгубљено ажурирање курсора, изгубљено ажурирање, искривљено читање, искривљено писање.

Прљаво писање

Суштина аномалије је у томе што трансакције могу преписати неповезане податке.

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Ова аномалија је опасна не само зато што подаци могу да се сукобе након извршења обе трансакције (као на слици), већ и због тога што је нарушена атомичност: пошто дозвољавамо преписивање неповезаних података, није јасно како вратити једну трансакцију без утицаја на другу .

Аномалија се може третирати прилично једноставно: стављамо браву на запис пре почетка снимања, забрањујући другим трансакцијама да мењају запис док се закључавање не уклони.

Прљаво читање

Прљаво читање значи читање неповезаних података.

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Проблеми настају када треба донети акције или одлуке на основу узорка.

Да бисте исправили аномалију, можете причврстити браву за читање, али то ће у великој мери утицати на перформансе. Много је једноставније рећи да за роллбацк трансакцију почетно стање података (пре почетка снимања) мора бити сачувано у систему. Зашто не читати одатле? Довољно је јефтин да већина база података подразумевано уклања прљаво читање.

Изгубљено ажурирање

Изгубљено ажурирање значи изгубљена ажурирања, а превод прилично тачно одражава суштину проблема:

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

У ствари, резултат трансакције Т2 је обрнут. Ова ситуација се може исправити експлицитним или имплицитним закључавањем писања. Односно, или једноставно ажурирамо запис, а онда долази до имплицитног закључавања, или изводимо изаберите за ажурирање, што доводи до закључавања читања и писања. Имајте на уму да је таква операција прилично опасна: нашим „невиним“ читањем блокирамо друга очитавања. Неке базе података нуде безбедније изаберите за дељење, омогућавајући читање података, али не и модификовање.

Курсор је изгубио ажурирање

За финију контролу, базе могу понудити друге алате, као што је курсор. Курсор је структура која садржи скуп редова и омогућава вам да прелазите преко њих. декларисати цурсор_наме за селецт_статемент. Садржај курсора се описује помоћу селецт.

Зашто вам треба курсор? Чињеница је да неке базе података нуде закључавање свих записа одабраних одабиром (стабилност читања), или само записа на којима се курсор тренутно налази (стабилност курсора). Са стабилношћу курсора, имплементирано је кратко закључавање, што нам омогућава да смањимо број закључавања ако понављамо велики узорак података. Због тога је изгубљена аномалија ажурирања издвојена одвојено за курсор.

Читање које се не може поновити

Читање које се не може поновити је да ће током извршења наше трансакције 2 узастопна читања истог записа довести до различитих резултата, јер је друга трансакција интервенисала између ова два читања, променила наше податке и била извршена.

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Зашто је ово уопште проблем? Замислите да је циљ трансакције Т2 на слици да одабере сву робу чија је цена мања од 150 УСД. Неко други је променио цену на 200 долара. Дакле, инсталирани филтер није радио.

Ове аномалије престају да се јављају када се додају двофазне блокаде или када се користи МВЦЦ механизам, о чему бих желео да разговарам одвојено.

Фантомско читање

Фантом је читање података које је додала друга трансакција.

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Као пример, можемо приметити нетачан избор најјефтинијег производа када се ова аномалија појави.

Отарасити се фантомских читања већ је прилично тешко. Редовно блокирање није довољно, јер не можемо блокирати нешто што још не постоји. 2ПЛ системи користе предиктивно закључавање, док МВЦЦ системи имају планер трансакција који враћа трансакције које би могле бити поремећене уметањем. И први и други механизам су прилично тешки.

Реад скев

Искривљеност читања настаје када радимо са неколико табела, чији се садржај мора доследно мењати.

Рецимо да имамо табеле које представљају постове и њихове мета информације:

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Једна трансакција чита из табела, друга их мења:

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Као резултат трансакције Т1, објава има наслов = Добар, и упдатед_би = Т2, што је нека врста недоследности.

У ствари, ово је непоновљиво читање, али као део неколико табела.

Да би ово поправио, Т1 може да закључа све редове које ће прочитати, што ће спречити трансакцију Т2 да промени информације. У случају МВЦЦ, Т2 трансакција ће бити отказана. Заштита од ове аномалије може постати важна ако користимо курсоре.

Врите скев

Ову аномалију је такође лакше објаснити на примеру: претпоставимо да би у нашем систему бар један лекар требало да дежура, али су оба лекара одлучила да отказују своју дужност:

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Аномалија је значила да нико од лекара неће дежурати. Зашто се то догодило? Зато што је трансакција проверавала услов који би могла да прекрши друга трансакција, а због изолације нисмо видели ову промену.

Ово је исто непоновљиво читање. Алтернативно, изабраници могу да закључају ове записе.

Искривљено писање и искривљено читање су комбинације претходних аномалија. Можете узети у обзир искривљено писање, што је у суштини фантомско читање. Размотрите табелу која садржи имена запослених, њихове плате и пројекат на којем раде:

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Шта може бити резултат слабљења нивоа изолације трансакција у базама података?

Као резултат, добијамо следећу слику: сваки менаџер је мислио да њихова промена неће довести до прекорачења буџета, па су извршили кадровске промене које су заједно довеле до прекорачења трошкова.

Узрок проблема је потпуно исти као код фантомског читања.

Налази

Опуштање нивоа изолације трансакција у бази података представља компромис између безбедности и перформанси. Избору овог нивоа треба приступити на основу потенцијалних ризика за пословање ако се појаве одређене аномалије.

Сазнајте више о курсу.

Извор: ввв.хабр.цом

Купите поуздан хостинг за сајтове са ДДоС заштитом, ВПС ВДС сервере 🔥 Купите поуздан веб хостинг са DDoS заштитом, VPS VDS сервере | ProHoster