{"id":30878,"date":"2019-10-31T21:37:56","date_gmt":"2019-10-31T18:37:56","guid":{"rendered":"https:\/\/prohoster.info\/blog\/tranzaktsii-i-mehanizmy-ih-kontrolya\/"},"modified":"2019-10-31T21:37:56","modified_gmt":"2019-10-31T18:37:56","slug":"tranzaktsii-i-mehanizmy-ih-kontrolya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tranzaktsii-i-mehanizmy-ih-kontrolya","title":{"rendered":"Tehingud ja nende kontrollimise mehhanismid","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h2>Tehingud<\/h2>\n<p><\/p>\n<h4>Tehingu all m\u00f5istetakse andmete t\u00f6\u00f6tlemise j\u00e4rjepidevust, millel on algus ja l\u00f5pp.<\/h4>\n<p>\nTehing on j\u00e4rjestikune lugemise ja kirjutamise teostamine. Tehingu l\u00f5petamine v\u00f5ib toimuda kas muudatuste salvestamise (commit) v\u00f5i tagasiv\u00f5tmise (rollback) kaudu. Andmebaaside kontekstis on tehing mitmest p\u00e4ringust, mis t\u00f5lgendatakse kui \u00fchtset p\u00e4ringut.<\/p>\n<h4>Tehingud peavad vastama ACID omadustele.<\/h4>\n<p>\nAatomaarne. Tehing kas t\u00e4idetakse t\u00e4ielikult v\u00f5i ei t\u00e4ideta \u00fcldse.<\/p>\n<p>Konsistentsus. Tehingu l\u00f5pus ei tohi andmetele kehtestatud piirangud (n\u00e4iteks andmebaasi piirangud) olla rikutud. Konsistentsus t\u00e4hendab, et s\u00fcsteem liikuda \u00fche korrektse oleku juurest teise korrektse olekuni.<\/p>\n<p>Isolatsioon. Paralleelselt toimuvaid tehinguid ei tohi m\u00f5jutada, n\u00e4iteks ei tohi nad muuta andmeid, mida kasutab teine tehing. Paralleelselt toimivate tehingute tulemus peab olema sama, mis siis, kui tehingud toimuksid j\u00e4rjestikku.<\/p>\n<p>Kestvus. P\u00e4rast kinnitamist ei tohi muudatused kaduma minna.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Tehingute ajakiri.<\/h2>\n<p><\/p>\n<h4>Ajakiri salvestab tehingute teostatud muudatused, tagades andmete aatomaarse ja kestva oleku s\u00fcsteemi talitlush\u00e4ire korral.<\/h4>\n<p>\nAjakiri sisaldab andmeid, mis olid enne ja p\u00e4rast nende muutmist tehingu k\u00e4igus. Write-ahead log strateegia n\u00f5uab, et logisse lisataks eelnevad v\u00e4\u00e4rtused enne tehingu algust ja l\u00f5pu v\u00e4\u00e4rtused p\u00e4rast selle l\u00f5petamist. S\u00fcsteemi \u00e4kilise peatamise korral loeb andmebaas logi vastupidises j\u00e4rjekorras ja t\u00fchistab tehingute tekitatud muudatused. Kui ajutiselt katkestatud tehing esitatakse, teostab andmebaas selle ja kannab tehingute muutused logisse. Oleku taastamisel j\u00f5hkruse hetkel loeb andmebaas logi sirgjooneliselt ning tagastab tehingute tekitatud muudatused. Nii s\u00e4ilib juba kinnitatud tehingute kestvus ja katkestatud tehingu aatomaarne olek.<\/p>\n<p>Lihtne vigaste tehingute korduv teostamine ei ole piisav taastamiseks. <\/p>\n<p><i>N\u00e4ide. Kasutaja kontol on 500$ ja kasutaja otsustab need automaadist v\u00e4lja v\u00f5tta. Teostatakse kaks tehingut. Esimene loeb saldo v\u00e4\u00e4rtust ja kui saldos on piisavalt vahendeid, annab see raha kasutajale. Teine v\u00e4hendab vajaliku summa saldost. Oletame, et s\u00fcsteemis tekkis t\u00f5rge ja esimene operatsioon ei toimunud, kuid teine toimus. Sel juhul ei saa me raha kasutajale uuesti v\u00e4lja anda, ilma et taastaksime s\u00fcsteemi algsesse seisundisse positiivse saldo saavutamiseks.<\/i><\/p>\n<h2>Isolatsiooni tasemed.<\/h2>\n<p><\/p>\n<h4>Lugemine fikseeritud andmetest (Read Committed).<\/h4>\n<p>\nKleebise probleemi (Dirty Read) puhul v\u00f5ib tehing lugeda teise tehingu vahepealset tulemust.<\/p>\n<p><i>N\u00e4ide. Algne saldo on 0$. T1 lisab saldot 50$. T2 loeb saldo v\u00e4\u00e4rtusena (50$). T1 t\u00fchistab muudatused ja l\u00f5petab. T2 j\u00e4tkab tegevust, tuginedes valele saldo andmele.<\/i><\/p>\n<p>Lahenduseks on lugemine fikseeritud andmetest (Read Committed), mis keelab tehingul lugeda andmeid, mida on muutnud teine tehing. Kui tehing A muutis mingit andmehulg, peab tehing B selle andmehulkade taotlemisel ootama, kuni tehing A on l\u00f5petatud.<\/p>\n<h4>Korduv lugemine (Repeatable Read).<\/h4>\n<p>\nKadunud muutuste probleem (Lost Updates). T1 salvestab muudatused T2 tehtud muudatuste peale.<\/p>\n<p><i>N\u00e4ide. Algne saldo on 0$ ja kaks tehingut t\u00e4iendavad saldot samal ajal. T1 ja T2 loevad saldot, mis on 0$. Siis T2 lisab 200$ 0$-le ja salvestab tulemuse. T1 lisab 100$ 0$-le ja salvestab tulemuse. L\u00f5pptulemus on 100$ asemel 300$.<\/i><\/p>\n<p>Korduv lugemise probleem (Unrepeatable Read). Korduv lugemine sama andmete kohta annab erinevaid v\u00e4\u00e4rtusi.<\/p>\n<p><i>N\u00e4ide. T1 loeb saldo v\u00e4\u00e4rtust, mis on 0$. Siis T2 lisab saldot 50$ ja l\u00f5petab. T1 loeb andmed uuesti ja avastab, et need ei \u00fchti varasema tulemusega.<\/i><\/p>\n<p>Korduv lugemine (Repeatable Read) tagab, et korduv lugemine toob kaasa sama tulemuse. \u00dchte andmehulka, mida on lugenud \u00fche tehingu k\u00e4igus, ei tohi teise tehingu k\u00e4igus muuta enne selle l\u00f5petamist. Kui tehing A luges mingit andmehulg, peab tehing B nende andmete taotlemisel ootama tehingu A l\u00f5petamist.<\/p>\n<h4>Korrastatud lugemine (Serializable).<\/h4>\n<p>\nFantoomlugemise probleem (Phantom Reads). Kaks p\u00e4ringut, mis valivad andmeid mingite tingimuste alusel, toovad erinevaid v\u00e4\u00e4rtusi.<\/p>\n<p><i>N\u00e4ide. T1 k\u00fcsib k\u00f5igi kasutajate arvu, kelle saldo on \u00fcle 0$ ja alla 100$. T2 v\u00e4hendab \u00fche dollari kasutajalt, kelle saldo on 101$. T1 t\u00e4idab p\u00e4ringu uuesti.<\/i><\/p>\n<p>J\u00e4rjestatud lugemine (Serializable). Tehingud teostatakse t\u00e4ielikult j\u00e4rjestikustena. Uuendamine ja uute kirje lisamine, mis kuuluvad p\u00e4ringu tingimuste alla, on keelatud. Kui tehing A k\u00fcsib andmeid kogu tabelist, siis tabel k\u00fclmutatakse t\u00e4ielikult teiste tehingute jaoks, kuni tehing A on l\u00f5petatud.<\/p>\n<h2>Ajastaja (Scheduler)<\/h2>\n<p><\/p>\n<h4>M\u00e4\u00e4rab j\u00e4rjekorra, milles operatsioonid peavad toimuma paralleelsete tehingute korral<\/h4>\n<p>\nTagab m\u00e4\u00e4ratud isolatsioonitaseme. Kui operatsioonide t\u00e4itmine ei s\u00f5ltu nende j\u00e4rjekorrast, on need operatsioonid kommutatiivsed (Permutable). Kommutatiivsed on lugemisoperatsioonid ja operatsioonid erinevate andmete \u00fcle. Kirjutamis- ja kirjutamisoperatsioonid ei ole kommutatiivsed. Ajastaja \u00fclesanne on vaheldada paralleelselt toimivate tehingute t\u00e4idetavaid operatsioone, et tulemus oleks ekvivalentne j\u00e4rjestikuse tehingute t\u00e4itmisega.<\/p>\n<h2>Paralleelsete \u00fclesannete kontrollimehhanismid (Concurrency Control)<\/h2>\n<p><\/p>\n<h4>Optimeeritud p\u00f5hineb konfliktide tuvastamisel ja lahendamisel, pessimistlik konfliktide v\u00e4ltimisel<\/h4>\n<p>\nOptimeeritud l\u00e4henemisel saavad mitmed kasutajad andmete koopiad. Esimene, kes l\u00f5petab redigeerimise, salvestab muudatused, \u00fclej\u00e4\u00e4nud peavad muudatused sulandama. Optimeeritud algoritm laseb konfliktidel tekkida, kuid s\u00fcsteem peab p\u00e4rast konflikti taastuma.<\/p>\n<p>Pessimistlikul l\u00e4henemisel takistab esimene kasutaja, kes andmed haarab, teistele andmete saamist. Kui konfliktid on haruldased, on m\u00f5istlik valida optimeeritud strateegia, kuna see tagab k\u00f5rgema paralleelsuse taseme.<\/p>\n<h2>Lukustus (Locking)<\/h2>\n<p><\/p>\n<h4>Kui \u00fcks tehing on andmed lukustanud, peavad teised tehingud andmetele juurde p\u00e4\u00e4semisel ootama lukustuse vabastamist.<\/h4>\n<p>\nLukku v\u00f5ib rakendada andmebaasile, tabelile, reale v\u00f5i atribuudi. Jagatud lukk (Shared Lock) v\u00f5ib olla rakendatud samadele andmetele mitme tehingu poolt, v\u00f5imaldades k\u00f5igile tehingutele (ka lukustavale) lugemist, keelates muutmise ja monopoolsed haaramised. Monopoolsed haaramised (Exclusive Lock) v\u00f5ivad olla rakendatud ainult \u00fche tehingu poolt, v\u00f5imaldades lukustavale tehingule k\u00f5iki tegevusi, kuid keelates k\u00f5igi teiste tegevused.<\/p>\n<h4>Muutumislukustus on olukord, kus tehingud j\u00e4\u00e4vad ootere\u017eiimile, mis kestab l\u00f5pmata kaua.<\/h4>\n<p>\n<i>N\u00e4ide. Esimene tehing ootab teise tehingu haaratud andmete vabastamist, samas kui teine ootab esimese poolt haaratud andmete vabastamist.<\/i><\/p>\n<h4>Optimeeritud lahendus muutumislukustuste probleemile lubab muutumislukustuste tekkimist, kuid seej\u00e4rel taastab s\u00fcsteemi, tagasi p\u00f6\u00f6rates \u00fche muutuvas lukustuses osaleva tehingu.<\/h4>\n<p>\nKindla ajavahemiku tagant otsitakse muutumislukustusi. \u00dcks meetod nende tuvastamiseks on ajap\u00f5hine, st arvestatakse, et muutumislukustus on aset leidnud, kui tehing kestab liiga kaua. Kui muutumislukustus leitakse, p\u00f6\u00f6ratakse \u00fcks tehing tagasi, mis v\u00f5imaldab teistel muutumislukustusprotsessis osalevatel tehingutel l\u00f5pule viia. Ohvri valik v\u00f5ib p\u00f5hineda tehingute maksumusel v\u00f5i nende vanusel (Wait-Die ja Wound-wait skeemid). <\/p>\n<p>Iga tehingule <b>T<\/b> antakse ajatemple; <b>TS<\/b> mis sisaldab tehingu k\u00e4ivitamise aega.<\/p>\n<p>Wait-Die. <\/p>\n<p><u>Kui <b>TS(Ti)<\/b> &lt; <b>TS(Tj)<\/b>, siis <b>Ti<\/b> ootab, vastasel juhul <b>Ti<\/b> p\u00f6\u00f6rdub tagasi ja alustab algusest sama ajatemplega.<\/u><\/p>\n<p>Kui noorem tehing on haaranud ressursi, ja vanem tehing k\u00fcsib sama ressursi, siis vanemale tehingule lubatakse oodata. Kui vanem tehing on ressursi haaranud, siis noorem tehing, kes seda ressurssi k\u00fcsib, p\u00f6\u00f6ratakse tagasi.<\/p>\n<p>Wound-wait. <\/p>\n<p><u>Kui <b>TS(Ti)<\/b> &lt; <b>TS(Tj)<\/b>, siis <b>Tj<\/b> p\u00f6\u00f6rdub tagasi ja alustab algusest sama ajatemplega, vastasel juhul <b>Ti<\/b> ootab.<\/u><\/p>\n<p>Kui noorem tehing on ressursi haaranud, ning vanem tehing k\u00fcsib sama ressurssi, siis noorem tehing p\u00f6\u00f6ratakse tagasi. Kui vanem tehing on ressursi haaranud, on vanemal tehingul, kes k\u00fcsib seda ressurssi, lubatud oodata. Ohvri valik vanuse alusel takistab muutumislukustuste teket, kuid p\u00f6\u00f6rab tagasi tehingud, mis ei ole muutumislukustuses. Probleem seisneb selles, et tehingud v\u00f5ivad korduvalt tagasi p\u00f6\u00f6rduda, kuna vanem tehing v\u00f5ib ressursi kaua hoida.<\/p>\n<h4>Pessimistlik lahendus muutumislukustuste probleemile ei luba tehingu algust, kui esineb muutumislukustuse tekkimise risk.<\/h4>\n<p>\nDeadlock'i tuvastamiseks luuakse graaf (ootegraaf, wait-for-graph), mille tipud on tehingud ning servirakud on suunatud tehingutest, mis ootavad andmete vabastamist, tehingutele, mis on need andmed juba haaranud. Deadlock'i leiab aset, kui graafil on ts\u00fckkel. Oote graafi loomine, eriti jaotatud andmebaasides, on kulukas protsess.<\/p>\n<h4>Kaksifaasiline lukustus \u2014 deadlock'ide v\u00e4ltimine, haarates k\u00f5ik tehinguga seotud ressursid tehingu alguses ja vabastades need tehingu l\u00f5pus.<\/h4>\n<p>\nK\u00f5ik lukustusoperatsioonid peavad eelnevalt olema enne esimest vabastavat operatsiooni. Sellel on kaks faasi \u2014 Growing Phase, kus toimub haarangute kogumine, ja Shrinking Phase, kus toimub haarangute vabastamine. Kui \u00fche ressursi haaramine on v\u00f5imatu, peab tehing algama uuesti. On v\u00f5imalik, et tehing ei suuda vajalikke ressursse haarata, n\u00e4iteks kui mitu tehingut konkureerivad \u00fche ressursi p\u00e4rast.<\/p>\n<h4>Kaksifaasiline kinnitamine tagab, et k\u00f5ik andmebaasi koopiad viivad l\u00e4bi kinnitamise.<\/h4>\n<p>\nIga andmebaas kannab logisse kirje, et andmed, mida muudetakse, ning vastab koordinaatorile OK (H\u00e4\u00e4letusfaas). Kui k\u00f5ik on vastanud OK, saadab koordinaator signaali, mis kohustab k\u00f5iki kinnitama. P\u00e4rast kinnitamist <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/server\/dts-los-angeles\/\"   title=\"serverile\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3482\">serverile<\/a> vastatakse OK, kui mitte \u00fckski ei vasta OK-le, saadab koordinaator k\u00f5igile serveritele signaali muudatuste t\u00fchistamiseks (T\u00e4iendamise faas).<\/p>\n<h2>Ajatempli meetod<\/h2>\n<p><\/p>\n<h4>Vanem tehing t\u00fchistatakse, kui ta \u00fcritab juurde p\u00e4\u00e4seda andmetele, mida on juba kasutanud noorem tehing.<\/h4>\n<p>\nIga tehingule m\u00e4\u00e4ratakse ajatemple, <b>TS<\/b> mis vastab t\u00e4itmise alguse ajale. Kui <b>Ti<\/b> on vanem, <b>Tj<\/b>, siis <b>TS(Ti)<\/b> &lt; <b>TS(Tj)<\/b>.<\/p>\n<p>kui tehing t\u00fchistatakse, m\u00e4\u00e4ratakse sellele uus ajatemple. Iga andmeobjekt <b>K<\/b> mida tehing kasutab, m\u00e4rgistatakse kahe templi. <b>W-TS(Q)<\/b> \u2014 noorima tehingu ajatemple, kes on edukalt teinud kirjutamise <b>K<\/b>. <b>R-TS(Q)<\/b> \u2014 noorima tehingu ajatemple, kes on teinud lugemise kirjutamise <b>K<\/b>.<\/p>\n<p>Kui tehing <b>T<\/b> taotleb andmete lugemist, <b>K<\/b> on kaks v\u00f5imalikku varianti.<\/p>\n<p><u>Kui <b>TS(T)<\/b> &lt; <b>W-TS(Q)<\/b>, st andmed on uuendatud noorema tehingu poolt, siis tehing <b>T<\/b> t\u00fchistatakse.<\/u><\/p>\n<p><u>Kui <b>TS(T)<\/b> &gt;= <b>W-TS(Q)<\/b>, siis lugemine toimub ja <b>R-TS(Q)<\/b> luua <b>MAX(R-TS(Q), TS(T))<\/b>.<\/u><\/p>\n<p>Kui tehing <b>T<\/b> taotleb andmete muutmist, <b>K<\/b> on kaks v\u00f5imalikku varianti. <\/p>\n<p><u>Kui <b>TS(T)<\/b> &lt; <b>R-TS(Q)<\/b>, st andmed on juba loetud noorema tehingu poolt ja kui muudatust teostatakse, siis tekib konflikt. Tehing <b>T<\/b> t\u00fchistatakse. <\/u><\/p>\n<p><u>Kui <b>TS(T)<\/b> &lt; <b>W-TS(Q)<\/b>, st tehing \u00fcritab kirjutada uuemat v\u00e4\u00e4rtust, tehing T t\u00fchistatakse. \u00dclej\u00e4\u00e4nud juhtudel toimub muudatus ja <b>W-TS(Q)<\/b> saab v\u00f5rdseks <b>TS(T)<\/b>.<\/u><\/p>\n<p>Oote graafi kallis loomine ei ole vajalik. Vanemad tehingud s\u00f5ltuvad noorematest, seega ei ole oote graafis ts\u00fckleid. Deadlock'e ei esine, kuna tehingud ei oota, vaid t\u00fchistatakse kohe. Kaskadised t\u00fchistamised on v\u00f5imalikud. Kui <b>Ti<\/b> t\u00fchistatakse ja <b>Tj<\/b> luges andmeid, mida ta muutis, <b>Ti<\/b>, siis <b>Tj<\/b> peab samuti t\u00fchistama. Kui sel juhul <b>Tj<\/b> oli juba kinnitatud, tekib stabiilsuse p\u00f5him\u00f5tte rikkumine.<\/p>\n<p>\u00dcks lahendus kaskadiste t\u00fchistamiste puhul. Tehing viib k\u00f5ik kirjutamise operatsioonid ellu l\u00f5pus, kusjuures teised tehingud peavad ootama selle operatsiooni l\u00f5petamist. Tehingud ootavad kinnitamist enne lugemist.<\/p>\n<h4>Thomas'i kirjutamise reegel \u2014 ajatempli meetodi variatsioon, millega on keelatud noorema tehingu poolt uuendatud andmeid vanema tehingu poolt uuesti kirjutada.<\/h4>\n<p>\nTehing <b>T<\/b> taotleb andmete muutmist, <b>K<\/b>. Kui <b>TS(T)<\/b> &lt; <b>W-TS(Q)<\/b>, st tehing \u00fcritab kirjutada uuemat v\u00e4\u00e4rtust, tehing T ei t\u00fchistata nagu ajatempli meetodis.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446662\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f, commit) \u043b\u0438\u0431\u043e \u043e\u0442\u043c\u0435\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u043e\u0442\u043a\u0430\u0442, rollback). \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0411\u0414 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0430\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c ACID \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043b\u0438\u0431\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30878","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f, commit) \u043b\u0438\u0431\u043e \u043e\u0442\u043c\u0435\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u043e\u0442\u043a\u0430\u0442, rollback). \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0411\u0414 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0430\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c ACID \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043b\u0438\u0431\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tranzaktsii-i-mehanizmy-ih-kontrolya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f, commit) \u043b\u0438\u0431\u043e \u043e\u0442\u043c\u0435\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u043e\u0442\u043a\u0430\u0442, rollback). \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0411\u0414 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0430\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c ACID \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043b\u0438\u0431\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tranzaktsii-i-mehanizmy-ih-kontrolya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:37:56+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:56+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Tehingud ja nende kontrollimehhanismid | ProHoster","description":"Tehingud Tehing on andmete \u00fcle teostatavate operatsioonide jada, millel on algus ja l\u00f5pp. Tehing on j\u00e4rjestikune lugemise ja kirjutamise operatsioonide t\u00e4itmine. Tehingu l\u00f5petamine v\u00f5ib olla kas muudatuste salvestamine (fikseerimine, commit) v\u00f5i muudatuste t\u00fchistamine (t\u00fchistamine, rollback). Andmebaaside kontekstis on tehing jada p\u00e4ringuid, mis k\u00e4sitletakse kui \u00fchtset p\u00e4ringut. Tehingud peavad vastama ACID omadustele. Aatomilisus. Tehing kas t\u00e4idetakse t\u00e4ielikult","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tranzaktsii-i-mehanizmy-ih-kontrolya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f | ProHoster","og:description":"\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f, commit) \u043b\u0438\u0431\u043e \u043e\u0442\u043c\u0435\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u043e\u0442\u043a\u0430\u0442, rollback). \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0411\u0414 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0430\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c ACID \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043b\u0438\u0431\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tranzaktsii-i-mehanizmy-ih-kontrolya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:37:56+00:00","article:modified_time":"2019-10-31T18:37:56+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30878","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-02-22 15:31:13","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:27:38","updated":"2026-02-22 15:31:13","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/30878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=30878"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/30878\/revisions"}],"predecessor-version":[{"id":162008,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/30878\/revisions\/162008"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=30878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=30878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=30878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}