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

Трансакција

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

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

Трансакциите мора да ги задоволуваат ACID својствата

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

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

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

Одржливост. Откако ќе се извршат, промените не треба да се изгубат.

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

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

Дневникот ги содржи вредностите што ги имале податоците пред и откако биле променети со трансакцијата. Стратегијата за евиденција за однапред запишување бара додавање на запис во дневникот за претходните вредности пред почетокот и за конечните вредности по завршувањето на трансакцијата. Во случај на ненадејно запирање на системот, базата на податоци го чита дневникот во обратен редослед и ги откажува промените направени од трансакциите. Откако ќе наиде на прекината трансакција, базата на податоци ја извршува и прави промени за неа во дневникот. Да се ​​биде во состојба во моментот на неуспехот, базата на податоци го чита дневникот по редослед и ги враќа промените направени од трансакциите. На овој начин се зачувува стабилноста на веќе извршените трансакции и атомичноста на прекинатата трансакција.

Едноставното повторно извршување на неуспешни трансакции не е доволно за обновување.

Пример. Корисникот има 500 долари на сметката и корисникот одлучува да ги подигне од банкомат. Во тек се две трансакции. Првиот ја чита вредноста на билансот и ако има доволно средства на салдото, му издава пари на корисникот. Вториот ја одзема потребната сума од салдото. Да речеме дека системот падна и првата операција не успеа, но втората не успеа. Во овој случај, не можеме повторно да му издадеме пари на корисникот без да го вратиме системот во првобитната состојба со позитивно салдо.

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

Прочитајте посветено

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

Пример. Почетната вредност на билансот е 0 $. Т1 додава 50 долари на вашето салдо. Т2 ја чита вредноста на билансот (50 долари). T1 ги отфрла промените и излегува. T2 продолжува со извршување со неточни податоци за салдо.

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

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

Проблем со изгубени ажурирања. T1 ги зачувува промените покрај промените на T2.

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

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

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

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

Нарачано читање (може да се серијалира)

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

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

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

Распоредувач

Го поставува редоследот по кој треба да се извршуваат операциите при паралелни трансакции.

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

Механизми за контрола на паралелни работни места (Concurrency Control)

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

Во оптимистичкиот пристап, повеќе корисници имаат на располагање копии од податоците. Првото лице што ќе заврши со уредувањето ги зачувува промените, додека другите мора да ги спојат промените. Оптимистичкиот алгоритам дозволува да дојде до конфликт, но системот мора да се опорави од конфликтот.

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

Заклучување

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

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

Ќор-сокак е ситуација кога трансакциите завршуваат во состојба на чекање која трае неодредено.

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

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

Во одредени интервали се бараат мртви точки. Еден од методите за откривање е со време, односно сметајте дека дошло до ќорсокак ако трансакцијата трае премногу долго за да се заврши. Кога ќе се најде ќор-сокак, една од трансакциите се враќа назад, дозволувајќи им на другите трансакции вклучени во ќор-сокакот да се завршат. Изборот на жртвата може да се заснова на вредноста на трансакциите или нивниот стаж (шеми Wait-Die и Wound-wait).

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

Чекај-Умри.

Ако TS (Ti) < TS (Tj), Потоа Ti чека, инаку Ti се враќа назад и започнува повторно со истиот временски печат.

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

Рана-чекај.

Ако TS (Ti) < TS (Tj), Потоа Tj се враќа назад и започнува повторно со истиот временски печат, во спротивно Ti чекање.

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

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

За да се открие ќор-сокак, се конструира график (график на чекање, граф на чекање), чии темиња се трансакции, а рабовите се насочени од трансакциите кои чекаат објавување податоци до трансакцијата што ги заробила овие податоци. Се смета дека настанал ќорсокак ако графикот има јамка. Конструирањето на графикон за чекање, особено во дистрибуирани бази на податоци, е скапа процедура.

Двофазно заклучување - спречува ќор-сокак со запленување на сите ресурси што ги користи трансакцијата на почетокот на трансакцијата и нивно ослободување на крајот

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

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

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

Метод на временски печат

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

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

Кога трансакцијата се враќа назад, ѝ се доделува нов временски печат. Секој податочен објект Q вклучени во трансакцијата е означен со две етикети. W-TS (Q) — временски печат на најмладата трансакција што успешно го заврши рекордот Q. R-TS (Q) — временски печат на најмладата трансакција што извршила запис за читање Q.

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

Ако ТС(Т) < W-TS (Q), односно податоците се ажурирани со помлада трансакција, потоа трансакцијата T се тркала назад.

Ако ТС(Т) >= W-TS (Q), потоа се врши читањето и R-TS (Q) станува MAX(R-TS(Q), TS(T)).

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

Ако ТС(Т) < R-TS (Q), односно податоците се веќе прочитани од помлада трансакција и доколку се направи промена ќе настане конфликт. Трансакција T се тркала назад.

Ако ТС(Т) < W-TS (Q), односно трансакцијата се обидува да запише понова вредност, трансакцијата Т се враќа назад. Во други случаи, промената се врши и W-TS (Q) станува еднаков ТС(Т).

Не е потребна скапа конструкција на графикон за чекање. Постарите трансакции зависат од поновите, така што нема циклуси во графикот на чекање. Нема ќор-сокак бидејќи трансакциите не се чекаат, туку веднаш се враќаат назад. Можни се каскадни враќања. Ако Ti се оттргна, и Tj Ги прочитав податоците што ги сменив Ti, Потоа Tj исто така треба да се врати назад. Ако во исто време Tj веќе е сторено, тогаш ќе има повреда на принципот на стабилност.

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

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

Трансакција T бара промени на податоците Q. Ако ТС(Т) < W-TS (Q), односно трансакцијата се обидува да презапише понова вредност, трансакцијата Т не се враќа назад како во методот на временскиот печат.

Извор: www.habr.com

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