Transakzioak eta horien kontrol-mekanismoak

Transakzioak

Transakzio bat datuen gaineko eragiketen sekuentzia bat da, hasiera eta amaiera duena.

Transakzio bat irakurtzeko eta idazteko eragiketen exekuzio sekuentziala da. Transakzio baten amaiera aldaketak gordetzea (konpromisoa) edo aldaketak bertan behera uztea (itzultzea) izan daiteke. Datu-base bati dagokionez, transakzio bat eskaera bakar gisa tratatzen diren hainbat eskaerak osatzen dute.

Transakzioek ACID propietateak bete behar dituzte

Atomikotasuna. Transakzioa guztiz edo batere ez da osatu.

Koherentzia. Transakzio bat osatzerakoan, datuei ezarritako murrizketak (adibidez, datu-baseko mugak) ez dira urratu behar. Koherentziak esan nahi du sistema egoera zuzen batetik beste egoera zuzen batera pasatuko dela.

Isolatze. Paraleloan egiten diren transakzioek ez lukete elkarri eragin behar, adibidez, beste transakzio batek erabiltzen dituen datuak aldatu. Transakzio paraleloak exekutatzeko emaitza transakzioak sekuentzialki gauzatuko balira bezala izan behar du.

Iraunkortasuna. Behin konpromisoa hartuta, aldaketak ez dira galdu behar.

Transakzioen erregistroa

Erregistroak transakzioek egindako aldaketak gordetzen ditu, datuen atomotasuna eta egonkortasuna bermatzen ditu sistemaren hutsegite bat gertatuz gero.

Erregistroak datuek transakzioak aldatu aurretik eta ondoren zituzten balioak ditu. Aurrez idatzitako erregistro-estrategiak aurreko balioei buruzko erregistro-sarrera gehitzea eskatzen du hasi aurretik, eta transakzioa amaitu ondoren azken balioei buruz. Sistema bat-batean gelditzen bada, datu-baseak erregistroa irakurtzen du alderantzizko ordenan eta transakzioek egindako aldaketak bertan behera uzten ditu. Transakzio eten bat aurkitu ondoren, datu-baseak exekutatzen du eta horri buruzko aldaketak egiten ditu erregistroan. Hutsegitearen unean egoeran egonik, datu-baseak erregistroa irakurtzen du aurrerantzean eta transakzioek egindako aldaketak itzultzen ditu. Horrela, dagoeneko egin diren transakzioen egonkortasuna eta etendako transakzioaren atomotasuna mantentzen dira.

Huts egindako transakzioak berriro gauzatzea ez da nahikoa berreskuratzeko.

Adibidea. Erabiltzaileak 500 $ ditu bere kontuan eta erabiltzaileak kutxazain automatiko batetik ateratzea erabakitzen du. Bi transakzio egiten ari dira. Lehenengoak saldoaren balioa irakurtzen du eta saldoan nahikoa funts badago, erabiltzaileari dirua jaulkitzen dio. Bigarrenak saldoari behar den zenbatekoa kentzen dio. Demagun sistema huts egin duela eta lehenengo eragiketak huts egin duela, baina bigarrenak. Kasu honetan, ezin diogu erabiltzaileari dirua berriro jaulki sistema saldo positiboarekin jatorrizko egoerara itzuli gabe.

Isolamendu-mailak

Irakurri Konprometituta

Dirty Read arazoa transakzio batek beste transakzio baten tarteko emaitza irakur dezakeela da.

Adibidea. Hasierako saldoaren balioa $ 0 da. T1ek 50 $ gehitzen dizkio zure saldoari. T2-k saldoaren balioa irakurtzen du (50 $). T1 aldaketak eta irteerak baztertzen ditu. T2-k saldoaren datu okerrekin exekutatzen jarraitzen du.

Irtenbidea datu finkoak irakurtzea da (Read Committed), transakzioak aldatutako datuak irakurtzea debekatzen duena. A transakzioak datu-multzo jakin bat aldatu badu, B transakzioa, datu horietara sartzean, A transakzioa amaitu arte itxaron behar du.

Irakurketa errepikakorra

Galdutako eguneratzeak arazoa. T1-ek aldaketak gordetzen ditu T2-ren aldaketen gainean.

Adibidea. Hasierako saldoaren balioa $ 0 da eta bi transakziok aldi berean saldoa berritzen dute. T1 eta T2 $ 0ko saldoa irakurtzen dute. Ondoren, T2-k 200 $ gehitzen ditu $0 eta emaitza gordetzen du. T1-ek 100 $ gehitzen ditu $0 eta emaitza gordetzen du. Azken emaitza $ 100 da, $ 300 ordez.

Errepikaezina irakurtzeko arazoa. Datu berdinak behin eta berriz irakurtzeak balio desberdinak ematen ditu.

Adibidea. T1-ek 0 $-ko saldoaren balioa irakurtzen du. Ondoren, T2-k 50 $ gehitzen dizkio saldoari eta amaitzen da. T1-ek datuak berriro irakurtzen ditu eta aurreko emaitzarekin desadostasuna aurkitzen du.

Irakurketa errepikagarriak bigarren irakurketa batek emaitza bera itzuliko duela ziurtatzen du. Transakzio batek irakurritako datuak ezin dira beste batzuetan aldatu transakzioa amaitu arte. A transakzioak datu multzo jakin bat irakurri badu, B transakzioa, datu horietara sartzean, A transakzioa amaitu arte itxaron behar du.

Irakurketa ordenatua (serializagarria)

Phantom Reads arazoa. Baldintza jakin batean oinarritutako datuak hautatzen dituzten bi kontsultak balio desberdinak itzultzen dituzte.

Adibidea. T1ek saldoa $ 0 baino handiagoa baina $ 100 baino txikiagoa duten erabiltzaile guztien kopurua eskatzen du. T2-k $ 1 kentzen dio 101 $-ko saldoa duen erabiltzaileari. T1ek eskaera berriro igortzen du.

Irakurketa ordenatua (serializagarria). Transakzioak erabat sekuentzial gisa exekutatzen dira. Debekatuta dago eskaeraren baldintzen barruan dauden erregistroak eguneratzea edo gehitzea. A transakzioak taula osoko datuak eskatu baditu, taula osoa izoztu egingo da beste transakzioetarako, A transakzioa amaitu arte.

Antolatzailea

Transakzio paraleloetan eragiketak egin behar diren ordena ezartzen du.

Isolamendu maila zehatz bat eskaintzen du. Eragiketen emaitza haien ordenaren araberakoa ez bada, eragiketa horiek komunztatzaileak dira (Aldakorra). Irakurketa eragiketak eta datu ezberdinen gaineko eragiketak komunztatzaileak dira. Irakurri-idazketa eta idazketa-idazketa eragiketak ez dira komunztatzaileak. Antolatzailearen zeregina transakzio paraleloek egindako eragiketak tartekatzea da, exekuzioaren emaitza transakzioen exekuzio sekuentzialaren baliokidea izan dadin.

Lan paraleloak kontrolatzeko mekanismoak (Aldiberetasunaren kontrola)

Baikorra gatazkak antzematen eta konpontzean oinarritzen da, ezkorra gatazkak sortu ez daitezen.

Ikuspegi baikorrean, hainbat erabiltzailek eskura dituzte datuen kopiak. Edizioa osatzen duen lehen pertsonak aldaketak gordetzen ditu, eta besteek aldaketak batu behar dituzte. Algoritmo baikor batek gatazkak gertatzea ahalbidetzen du, baina sistemak gatazkatik berreskuratu behar du.

Ikuspegi ezkor batekin, datuak harrapatzen dituen lehen erabiltzaileak besteei datuak jasotzea eragozten die. Gatazkak arraroak badira, estrategia baikorra aukeratzea komeni da, aldiberekotasun maila handiagoa ematen baitu.

Blokeatzea

Transakzio batek datuak blokeatu baditu, beste transakzio batzuek desblokeatu arte itxaron beharko dute datuetara sartzeko.

Bloke bat datu-base, taula, errenkada edo atributu batean gainjar daiteke. Partekatutako blokeoa hainbat transakziok datu berdinei ezar dakieke, transakzio guztiak (inposatu zuena barne) irakurtzeko aukera ematen du, aldatzea eta harrapaketa esklusiboa debekatzen du. Blokeo esklusiboa transakzio bakarrak ezar dezake, transakzio inposatzailearen edozein ekintza ahalbidetzen du, besteen ekintzak debekatzen ditu.

Blokeoa transakzioak mugagabe irauten duen egoera batean amaitzen diren egoera da.

Adibidea. Lehenengo transakzioa bigarrenak hartutako datuak askatu arte itxarongo du, bigarrenak, berriz, lehenengoak jasotako datuak askatu arte.

Deadlock arazoaren irtenbide baikor batek blokeoa gertatzea ahalbidetzen du, baina gero sistema berreskuratzen du blokeoan parte hartzen duten transakzioetako bat atzera botaz.

Blokeoak tarte jakin batzuetan bilatzen dira. Detektatzeko metodoetako bat denboraren araberakoa da, hau da, kontuan hartu blokeo bat gertatu dela transakzioa oso luzea hartzen bada. Blokeo bat aurkitzen denean, transakzioetako bat atzera egiten da, blokeoan parte hartzen duten beste transakzio batzuk osatzeko aukera emanez. Biktimaren aukeraketa transakzioen balioaren edo haien antzinatasunaren arabera egin daiteke (Wait-Die eta Wound-wait eskemak).

Transakzio bakoitza T denbora-zigilu bat esleitzen zaio TS transakzioaren hasiera-ordua jasotzen duena.

Itxaron-hil.

Bada TS (Ti) < TS(Tj)ondoren Ti itxaron, bestela Ti atzera egiten du eta berriro hasten da denbora-zigilu berarekin.

Transakzio gazte batek baliabide bat eskuratu badu eta transakzio zaharrago batek baliabide bera eskatzen badu, orduan transakzio zaharragoak itxaron behar du. Transakzio zaharren batek baliabide bat eskuratu badu, baliabide hori eskatzen duen transakzio gazteena atzera egingo da.

Zauri-itxaron.

Bada TS (Ti) < TS(Tj)ondoren Tj atzera egiten du eta berriro hasten da denbora-zigilu berarekin, bestela Ti zain.

Transakzio gazteago batek baliabide bat eskuratu badu eta transakzio zaharrago batek baliabide bera eskatzen badu, transakzio gazteena atzera egingo da. Transakzio zaharren batek baliabide bat eskuratu badu, baliabide hori eskatzen duen transakzio gazteenak itxaron behar du. Lehentasunean oinarritutako biktimen hautaketak blokeoak saihesten ditu, baina blokeatuta ez dauden transakzioak atzera egiten ditu. Arazoa da transakzioak askotan atzera egin daitezkeela, zeren... transakzio zaharrago batek denbora luzez eduki dezake baliabidea.

Blokeo-arazoaren konponbide ezkor batek ez du onartzen transakzio bat exekutatzen hastea, blokeo-arriskua badago.

Blokeo bat detektatzeko, grafiko bat eraikitzen da (waiting graph, wait-for-graph), zeinaren erpinak transakzioak dira, eta ertzak datuak askatzeko zain dauden transakzioetatik datu horiek harrapatu dituen transakziora bideratzen dira. Blokeo bat gertatu dela jotzen da grafikoak begizta badu. Itxaron grafiko bat eraikitzea, batez ere datu-base banatuetan, prozedura garestia da.

Bi faseko blokeoa - blokeoak saihesten ditu transakzio batek erabiltzen dituen baliabide guztiak transakzioaren hasieran eta amaieran askatuz.

Blokeatzeko eragiketa guztiek lehen desblokeatzearen aurretik behar dute. Bi fase ditu: Hazkuntza fasea, zeinetan heldulekuak pilatzen diren, eta Txikitze fasea, heldulekuak askatzen diren bitartean. Baliabideetako bat harrapatzea ezinezkoa bada, transakzioa berriro hasten da. Baliteke transakzio batek ezin izatea beharrezko baliabideak eskuratu, adibidez, hainbat transakzio baliabide berdinengatik lehiatzen badira.

Bi faseko konpromisoak bermatzen du konpromisoa datu-baseen erreplika guztietan exekutatzen dela

Datu-base bakoitzak aldatuko diren datuei buruzko informazioa sartzen du erregistroan eta koordinatzaileari Ados erantzuten dio (Bozketa Fasea). Denek ados erantzun ondoren, koordinatzaileak seinale bat bidaltzen du denak konprometitzera behartzen dituena. Konpromisoa egin ondoren, zerbitzariek ondo erantzuten dute; gutxienez batek ez badu ongi erantzuten, koordinatzaileak seinale bat bidaltzen du zerbitzari guztiei aldaketak bertan behera uzteko (Osaketa fasea).

Denbora-zigiluaren metodoa

Transakzio zaharrago bat atzera egiten da transakzio gazteago batek inplikatutako datuak atzitzen saiatzean

Transakzio bakoitzari denbora-zigilu bat esleitzen zaio TS exekuzioaren hasiera-orduari dagokiona. Bada Ti zaharragoak Tjondoren TS (Ti) < TS(Tj).

Transakzio bat atzera egiten denean, denbora-zigilu berri bat esleitzen zaio. Datu-objektu bakoitza Q transakzioan parte hartzen duten bi etiketarekin markatuta dago. W-TS(Q) β€” Erregistro bat arrakastaz osatu duen transakzio gazteenaren denbora-zigilua Q. R-TS(Q) β€” irakurritako erregistroa egin duen transakzio gazteenaren denbora-zigilua Q.

Transakzioa egiten denean T datuak irakurtzeko eskaerak Q Bi aukera daude.

Bada TS(T) < W-TS(Q), hau da, datuak transakzio gazteago batek eguneratu zituen, gero transakzioa T atzera egiten du.

Bada TS(T) >= W-TS(Q), gero irakurketa egiten da eta R-TS(Q) bihurtzen ari da MAX(R-TS(Q), TS(T)).

Transakzioa egiten denean T datuen aldaketak eskatzen ditu Q Bi aukera daude.

Bada TS(T) < R-TS(Q), hau da, datuak dagoeneko irakurri ditu transakzio gazteago batek eta aldaketaren bat eginez gero, gatazka sortuko da. Transakzioa T atzera egiten du.

Bada TS(T) < W-TS(Q), hau da, transakzioa balio berriagoa gainidazten saiatzen da, T transakzioa atzera botatzen da. Beste kasu batzuetan, aldaketa gauzatzen da eta W-TS(Q) berdin bihurtzen da TS(T).

Ez da itxaron grafikoen eraikuntza garestirik behar. Transakzio zaharrak berrienen araberakoak dira, beraz, itxaron grafikoan ez dago ziklorik. Ez dago blokeorik, transakzioak ez direlako itxaron, baina berehala atzera egiten direlako. Cascading rollback-ak posible dira. Bada Ti urrundu eta Tj Aldatu ditudan datuak irakurri ditut Tiondoren Tj atzera egin beharko luke. Aldi berean bada Tj dagoeneko egin da, orduan egonkortasun-printzipioa urratu egingo da.

Kaskadako itzulketen irtenbideetako bat. Transakzio batek idazketa eragiketa guztiak amaitzen ditu amaieran, eta beste transakzioek eragiketa hori amaitu arte itxaron behar dute. Transakzioak konprometituak izateko zain daude irakurri aurretik.

Thomas idazteko araua - transakzio gazteago batek eguneratutako datuak zaharrago batek gainidaztea debekatuta dagoen denbora-zigiluaren metodoaren aldakuntza.

Transakzioa T datuen aldaketak eskatzen ditu Q. bada TS(T) < W-TS(Q), hau da, transakzioa balio berriagoa gainidazten saiatzen da, T transakzioa ez da atzera egiten denbora-zigiluaren metodoan bezala.

Iturria: www.habr.com

Gehitu iruzkin berria