Трансакције и њихови контролни механизми

Трансакција

Трансакција је низ операција над подацима који има почетак и крај.

Трансакција је секвенцијално извршавање операција читања и писања. Завршетак трансакције може бити или чување промена (урезивање) или отказивање промена (повратак). У односу на базу података, трансакција се састоји од неколико захтева који се третирају као један захтев.

Трансакције морају задовољити својства АЦИД

Атомицити. Трансакција је или завршена у потпуности или уопште није завршена.

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

Изолација. Трансакције које се одвијају паралелно не би требало да утичу једна на другу, на пример, мењају податке које користи друга трансакција. Резултат извршавања паралелних трансакција треба да буде исти као да се трансакције извршавају секвенцијално.

Одрживост. Када се једном обаве, промене не би требало да буду изгубљене.

Дневник трансакција

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

Дневник садржи вредности које су подаци имали пре и после промене трансакције. Стратегија дневника уписивања унапред захтева додавање уноса дневника о претходним вредностима пре почетка и о коначним вредностима након што је трансакција завршена. У случају изненадног заустављања система, база података чита лог обрнутим редоследом и поништава промене извршене трансакцијама. Након што је наишла на прекинуту трансакцију, база података је извршава и уноси измене у дневник. Будући да је у стању у тренутку квара, база података чита дневник у унапред редоследу и враћа промене извршене трансакцијама. На овај начин се чува стабилност трансакција које су већ извршене и атомичност прекинуте трансакције.

Једноставно поновно извршавање неуспешних трансакција није довољно за опоравак.

Пример. Корисник има 500 долара на свом налогу и корисник одлучује да их подигне са банкомата. Две трансакције су у току. Први очитава вредност биланса и ако има довољно средстава на салду, издаје новац кориснику. Други одузима потребан износ од биланса. Рецимо да се систем срушио и прва операција није успела, али друга јесте. У овом случају, не можемо поново издати новац кориснику без враћања система у првобитно стање са позитивним стањем.

Нивои изолације

Реад Цоммиттед

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

Пример. Почетна вредност биланса је 0 долара. Т1 додаје 50 УСД на ваш салдо. Т2 чита вредност биланса (50 долара). Т1 одбацује промене и излази. Т2 наставља извршавање са нетачним подацима о стању.

Решење је читање фиксних података (Реад Цоммиттед), што забрањује читање података измењених трансакцијом. Ако је трансакција А променила одређени скуп података, онда је трансакција Б, када приступа овим подацима, принуђена да чека да се трансакција А заврши.

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

Проблем изгубљених ажурирања. Т1 чува промене поред промена Т2.

Пример. Почетна вредност биланса је 0 долара и две трансакције истовремено допуњују стање. Т1 и Т2 очитавају стање од 0 долара. Т2 затим додаје $200 на $0 и чува резултат. Т1 додаје $100 на $0 и чува резултат. Коначни резултат је 100 долара уместо 300 долара.

Непоновљив проблем читања. Читање истих података више пута враћа различите вредности.

Пример. Т1 чита вредност биланса од 0 долара. Т2 затим додаје 50 долара на салдо и завршава. Т1 поново чита податке и проналази неслагање са претходним резултатом.

Поновљиво читање осигурава да ће друго читање вратити исти резултат. Подаци које чита једна трансакција не могу се мењати у другим док се трансакција не заврши. Ако је трансакција А прочитала одређени скуп података, онда је трансакција Б, када приступа овим подацима, принуђена да чека да се трансакција А заврши.

Наручено читање (сериализабле)

Проблем са фантомским читањем. Два упита која бирају податке на основу одређеног услова враћају различите вредности.

Пример. Т1 захтева број свих корисника чије је стање веће од 0 УСД, али мање од 100 УСД. Т2 одузима 1 УСД од корисника са стањем од 101 УСД. Т1 поново издаје захтев.

Наручено читање (сериализабле). Трансакције се извршавају потпуно секвенцијално. Забрањено је ажурирање или додавање записа који потпадају под услове захтева. Ако је трансакција А захтевала податке из целе табеле, онда се цела табела замрзава за друге трансакције док се трансакција А не заврши.

Планер

Подешава редослед којим би операције требало да се обављају током паралелних трансакција.

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

Механизми за контролу паралелних послова (Цонцурренци Цонтрол)

Оптимистичан се заснива на откривању и решавању конфликата, песимистички на спречавању настајања сукоба.

У оптимистичком приступу, више корисника има на располагању копије података. Прва особа која заврши уређивање чува промене, док остали морају да споје измене. Оптимистички алгоритам дозвољава да дође до сукоба, али систем се мора опоравити од конфликта.

Са песимистичким приступом, први корисник који ухвати податке спречава друге да их приме. Ако су конфликти ретки, мудро је изабрати оптимистичку стратегију, јер она обезбеђује виши ниво истовремености.

Закључавање

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

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

Застој је ситуација у којој трансакције завршавају у стању чекања које траје неограничено.

Пример. Прва трансакција чека да подаци које је ухватила друга буду пуштени, док друга чека да подаци које је ухватила прва буду пуштени.

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

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

Свака трансакција T додељена је временска ознака TS који садржи време почетка трансакције.

Чекај-Умри.

Ако ТС(Ти) < ТС(Тј), Онда Ti чека, иначе Ti враћа се и почиње поново са истом временском ознаком.

Ако је млада трансакција набавила ресурс, а старија трансакција захтева исти ресурс, старијој трансакцији је дозвољено да чека. Ако је старија трансакција набавила ресурс, онда ће се млађа трансакција која захтева тај ресурс бити враћена.

Рани-чекај.

Ако ТС(Ти) < ТС(Тј), Онда Tj враћа се уназад и почиње поново са истом временском ознаком, иначе Ti чекајући.

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

Песимистичко решење проблема застоја не дозвољава да трансакција почне да се извршава ако постоји ризик од застоја.

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

Двофазно закључавање – спречава застоје тако што заплени све ресурсе које користи трансакција на почетку трансакције и отпусти их на крају

Све операције блокирања морају претходити првом откључавању. Има две фазе - Фазу раста, током које се хватаљке акумулирају, и Фазу смањивања, током које се захвати ослобађају. Ако је немогуће ухватити један од ресурса, трансакција почиње изнова. Могуће је да трансакција неће моћи да стекне потребне ресурсе, на пример, ако се више трансакција такмичи за исте ресурсе.

Двофазно урезивање осигурава да се урезивање изврши на свим репликама базе података

Свака база података уноси информације о подацима који ће бити промењени у дневник и одговара координатору ОК (Фаза гласања). Након што су сви одговорили ОК, координатор шаље сигнал обавезујући све да се посвете. Након урезивања, сервери одговарају ОК ако бар један не одговори ОК, онда координатор шаље сигнал да откаже промене свим серверима (фаза завршетка).

Метода временске ознаке

Старија трансакција се поништава када покушава да приступи подацима укљученим у млађу трансакцију

Свакој трансакцији је додељена временска ознака TS који одговара времену почетка извршења. Ако Ti старији Tj, Онда ТС(Ти) < ТС(Тј).

Када се трансакција врати, додељује јој се нова временска ознака. Сваки објекат података Q укључен у трансакцију означен је са две ознаке. В-ТС(К) — временска ознака најмлађе трансакције која је успешно завршила запис преко Q. Р-ТС(К) — временска ознака најмлађе трансакције на којој је извршен запис читања Q.

Када трансакција T захтева за читање података Q Постоје две опције.

Ако ТС(Т) < В-ТС(К), односно подаци су ажурирани млађом трансакцијом, затим трансакцијом T котрља назад.

Ако ТС(Т) >= В-ТС(К), затим се врши очитавање и Р-ТС(К) постаје МАКС(Р-ТС(К), ТС(Т)).

Када трансакција T захтева промене података Q Постоје две опције.

Ако ТС(Т) < Р-ТС(К), односно подаци су већ прочитани од стране млађе трансакције и ако се изврши промена, доћи ће до сукоба. Трансакција T котрља назад.

Ако ТС(Т) < В-ТС(К), то јест, трансакција покушава да препише новију вредност, трансакција Т се враћа назад. У другим случајевима, промена се врши и В-ТС(К) постаје равноправан ТС(Т).

Није потребна скупа конструкција графа чекања. Старије трансакције зависе од новијих, тако да у графикону чекања нема циклуса. Нема застоја јер се трансакције не чекају већ се одмах враћају. Могућа су каскадна враћања. Ако Ti откотрљао, и Tj Прочитао сам податке које сам променио Ti, Онда Tj такође треба да се врати. Ако у исто време Tj већ почињено, онда ће доћи до кршења принципа стабилности.

Једно од решења за каскадно враћање. Трансакција завршава све операције писања на крају, а друге трансакције морају чекати да се та операција заврши. Трансакције чекају да буду извршене пре него што буду прочитане.

Томасово правило писања – варијација методе временске ознаке у којој је забрањено да подаци ажурирани млађом трансакцијом буду замењени старијом

трансакција T захтева промене података Q. Ако ТС(Т) < В-ТС(К), односно трансакција покушава да препише новију вредност, трансакција Т се не враћа назад као у методи временске ознаке.

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

Додај коментар