310 likes | 420 Views
TECHNIKY PARALELNÉHO SPRACOVANIA. Marek Jasa ň 4 ročník ŠPZ. ZÁKLADNÉ POJMY. Definícia – Rozvrh
E N D
TECHNIKY PARALELNÉHO SPRACOVANIA Marek Jasaň 4 ročník ŠPZ
ZÁKLADNÉ POJMY Definícia – Rozvrh Rozvrh S je plán spracovania množiny transakcií ( T1,T2,.....,Tn) , čo je definovaná postupnosť operácií Oij z transakcií T1,T2,.....,Tn v poradí umožňujúcom vykonanie každej transakcie. Definícia – sériový rozvrh Rozvrh S nad množinou transakcií ( T1,T2,.....,Tn) je sériovým rozvrhom, ak existuje permutácia nad [1,2,…..,n] takých, že S =<T(1), T(2), ....T(n)>.
Definícia – serializovateľný rozvrh Rozvrh S nad množinou transakcií T je serializovatelný, ak dáva rovnaké výsledky, ako sériový rozvrh nad množinou transakcií T. Definícia – Ekvivalencia rozvrhov Dva rozvrhy S1 a S2 nad množinou transakcií sú ekvivalentné ,ak pre každú dvojicu operácií Oij a Okl, (ik) kedykoľvek platí : Oij1 Oklpotom Oij2 Okl. Definícia – permutovateľné operácie Dve operácie Oij a Okl sú permutovateľné ( zameniteľné) vtedy keď ich vykonanie v poradí OijOkldáva rovnaké výsledky, ako OijOkl.
Veta – dostatočná podmienka serializovateľnosti Dostatočnou podmienkou serializovateľnosti je to, aby mohol byť transformovaný pomocou permutovaných operácií na sériový rozvrh
Precedencia transakcií Precedencia transakcií znamená, že transakcia T1 predchádza transakciu T2 v rozvrhu S= ( T1,T2,.....,Tn), ak v ňom existujú dve nepermutovateľné operácie Oik a Ojl , kde platí OikOjl , teda operácia Oik je vykonaná v transakcii T1 pred vykonaním operácie Ojl v transakcii T2. Definícia – graf precedencie transakcií Graf precedencie transakcií predstavuje orientovaný graf G= (T,V ), kde množina vrcholov T je množinou transakcií a množina orientovaných hrán vij = [Ti,Tj] takých , že transakcia Ti predchádza transakciu Tj.
PROBLÉMY SÚVISIACE S PARALELNÝM SPRACOVANÍM Pri paralelnom spracovaní transakcií je nutné riešiť poradie spracovávania jednotlivých operácií pomocou rozvrhov. V prípade, že by sme sa tomuto problému nevenovali, mohlo by dôjsť k štyrom typom chýb , a tým aj k poškodeniu údajov v databáze. 1) Problém straty informácií 2) Problém nekomitovaných dát 3) Prípad nekonzistentných dát 4) Fantóm
Druhy protokolov: • Zamykanie • Časové pečiatky
Zamykanie • Zamykanie je technika, ktorá umožní paralelný prístup k zdieľaným objektom DB. Pokiaľ transakcia vlastní zámok na niektorý z objektov, má istotu, že žiadna iná transakcia nemôže modifikovať daný objekt. • Zámok je premenná viažuca sa na daný datový objekt, ktorého stav nás z hľadiska paralel. spracovania môže zaujímať. • Druhy zámkov • Zdieľaný zámok ( S –lock) • Exkluzívny zámok (X –lock) • Binárny zámok
Oblasti pôsobnosti zámkov (Informix) Databáza - pri otvorení databázy sa aplikuje S-lock -príkaz DATABASE názov EXCLUSIVE otvorí databázu s X -lock Tabuľka -zamyká sa automaticky pri ALTER INDEX, ALTER TABLE, CREATE INDEX, DROP INDEX - LOCK TABLE názov – explicitne zamkne tabuľku
Riadok / stránka / kľúč - zamykajú sa implicitne napr. pri UPDATE, INSERT a DELETE - zamykanie diskových stránok alebo riadkov sa nastavuje v CREATE TABLE alebo v ALTER TABLE - pri DELETE sa nastavuje Lock na zmazané riadky
Samotné prideľovanie zámkov je riadené tromi operáciami : R – LOCK – sa vykonáva vždy pred operáciou Read a vyžaduje pridelenie zdieľaného zámku na daný objekt. W – LOCK - predchádza operáciu Write dátového objektu, alebo Read dátového objektu, ak sa predpokladá následná operácia Write. Pri tejto operácii sa vždy vyžaduje pridelenie exkluzívneho zámku na daný objekt. UNLOCK – táto operácia zabezpečí uvoľnenie zámku, ktorý je pridelený dátovému objektu.
Pre transakciu platí , že je dobre definovaná z hľadiska zamykania, ak platia nasledovné podmienky: 1) každá operácia Read je predchádzaná operáciou R_LOCK, alebo W_LOCK, za ktorou nasleduje operácia UNLOCK 2) každá operácia Write je predchádzaná operáciou W_LOCK, a nasledovaná operáciou UNLOCK
Pre samotný proces zamykania si môžeme definovať maticu zamykania, z ktorej vyplýva , aký zámok je možné prideliť dátovému objektu na už prideĺenom zámku k danému objektu.
Transakcia T pred každou operáciou Read(X) musí spustiť operáciu R_LOCK(X) alebo W_LOCK(X). Pred každou operáciou Write(X) v transakcii T je nutné spustiť operáciu W_LOCK(X). Transakcia T musí zabezpečiť spustenie operácie UNLOCK(X) po vykonaní všetkých operácií Read(X) a Write(X). Transakcia nesmie pripustiť vykonanie operácie W_LOCK(X) alebo R_LOCK(X), ak je na objekt daný zdieľaný alebo exkluzívný zamok inou transakciou. Transakcia T nemôže vykonať operáciu UNLOCK na objekty X zamknuté inou transakciou.
Dvojfázové zamykanie Pri paralelnom spracovaní transakcií je potrebné zabezpečiť serializovateľnosť vykonania ich operácií. Pri zamykaní sa serializovateľnosť zabezpečuje použitím dvojfázového uzamykacieho protokolu. Definícia - Dvojfázový uzamykací protokol: V transakcii T všetky zamykacie operácie R_LOCK, W_LOCK predchádzajú prvú operáciu UNLOCK.
Z uvedeného vyplýva, že pred spracovaním akéhokoľvek objektu je nutné žiadať zámok na tento objekt. Po uvoľnení zámku nad objektom transakcia už nesmie zamknúť žiaden objekt. Transakciu môžme rozdeliť ne dve fázy: 1 fáza rastu – spracovanie žiadosti na zámky a ich prideľovanie. fáza uvoľňovania - všetky zámky pridelené v prvej fáze sú uvoľňované
Veta • Ak sú všetky transakcie zabezpečené dvojfázovým uzamykacím protokolom, tak sú všetky možné rozvrhy serializovateľné. • Spomenutá technika je známa ako základné dvojfázové zamykanie. • Okrem tejto poznáme ešte : • konzervatívne dvojfázové zamykanie – zámky na všetky objekty sú pridelené na zčiatku vykonania transakcie • Striktné dvojfázové zamykanie – zámky budú uvoľnené až po vykonaní operácie COMMIT , čiže po potvrdení transakcie. • 3) Rigorózne dvojfázové zamykanie – uvolní zámky až po skončení transakcie.
Časové pečiatky Používanie dvojfázového zamykacieho protokolu nám zabezpečuje serializovateľnosť, ale zároveň spôsobuje uviaznutie systému. Preto bol navrhnutý iný spôsob na zabezpečenie serializovateľnosti na princípe používania časových pečiatok. Časová pečiatka transakcie je unikátný identifikátor vytváraný v SRBD tak, aby jednoznačne identifikoval transakciu. Veľmi často je toto číslo zviazané z časom začiatku transakcie, preto sa používa názov časová pečiatka (TIMESTAMP).
Definícia- časová pečiatka objektu Časová pečiatka objektu je numerická hodnota priradená objektu DB vyjadrujúca číslo transakcie, ktorá z ňou naposledy pracovala. a) univerzálna časová pečiatka – objektu je pridelená hodnota transakcie,ktorá posledná spracovávala objekt bez ohľadu na typ operácie časová pečiatka READ – hodnota transakcie, ktorá posledná čítala objekt a) časová pečiatkaWRITE – hodnota transakcie, ktorá posledná zapisovala daný objekt
Úplné pečiatkovanie Ak máme dve transakcie T1 a T2 a i je časová pečiatka Ti a j je časová pečiatka Tj , a platí i < j pre operácie nad tým istým objektom databázy X , čiže je nutné zaistiť, aby transakcia Ti predchádzala transakciu Tj, v opačnom prípade musí jednu transakciu zrušiť a pustiť ju neskôr.
Procedure READ (Ti : transakcia, X : objekt DB); IF TimeStamp_Object(X) i THEN BEGI Vykonaj Read(X); TimeStamp_Object(X) := i; END ELSE ABORT; END IF END READ
Procedure WRITE (Ti : transakcia, X : objekt DB); IF TimeStamp_Object(X) i THEN BEGIN Vykonaj WRITE(X); TimeStamp_Object(X) := i; END ELSE ABORT; END IF END WRITE
Čiastočné opečiatkovanie Predošlý algoritmus používal len jednu pečiatku pre objekt DB a usporiadával všetky operácie nad objektami DB. Avšak dovoľoval usporiadavať len operácie typu Read / Write alebo typu Write/ Write. Preto s použitím dvojice časových pečiatok pre každý objekt DB je možné usporiadať transakcie so všetkými typmi nepermutovaných operácií a to: Read / Write Write / Write Write / Read ReadTimeStamp_Object - čas čítania transakciou WriteTimeStamp_Object - čas zápisu objektu transakciou
Procedure READ (Ti : transakcia, X : objekt DB); IF WriteTimeStamp_Object(X) i THEN BEGIN Vykonaj Read(X); ReadTimeStamp_Object(X) := MAX(ReadTimeStamp_Object(X),i); END ELSE ABORT; END IF; END READ;
Procedure WRITE (Ti : transakcia, X : objekt DB); IF ( WriteTimeStamp_Object(X) i ) AND ( ReadTimeStamp_Object(X) i ) THEN BEGIN Vykonaj Write(X); WriteTimeStamp_Object(X) := i; END ELSE ABORT; END IF; END READ;
Uviaznutie Uviaznutie (DEADLOCK) sa vyskytuje vtedy , keď jedna alebo viac transakcií čaká na objekt zamknutý inou transakciou. Tieto transakcie sú zaradené do čakacej fronty. Definícia uviaznutia – uviaznutie je situácia , keď každá so skupiny transakcií splna nasledovné podmienky : - každá zo skupiny transakcií je blokovaná čakaním na objekt DB - - ukončenie každej z transakcií, ktorá nepatrí do skupiny blokovaných neumožní odblokovanie žiadnej z nich
Obr. 3. Príklad uviaznutia Transakcia T1 Transakcia T2
Predchádzanie uviaznutiu V mnohých systémoch SRBD rieši uviaznutie tzv. predchádzaním, to znamená , že nedovolí spustiť transakciu , ktorá by mohla spôsobiť uviaznutie, alebo ukončí činnosť transakcie, ktorá by mohla spôsobiť uviaznutie.Jednou s metód je už spomenuté konzervatívne zamykanie. V tejto metóde sa na začiatku detekuje, či nejaká iná transakcia nepracuje s požadovaným objektom, a ak áno, tak sa nepokračuje v transakcii. Nevýhodou tejto metódy je to, že spomaľuje prácu systému a neumožní pracovať transakciám tak, aby mohli zdieľať niektoré objekty DB. Preto sú oveľa častejšie používané metódy založené na používaní časových pečiatok.
Metóda WAIT -DIE V tejto metóde je staršej transakcii dovolené čakať na mladšiu transakciu a pokiaľ mladšia žiada o objekt, ktorý drží staršia transakcia, tak mladšia je zrušená a reštartovaná. Algoritmus tejto metódy: IF TimeStamp( Ti ) < TimeStamp( Tj ) THEN BEGIN Tj WAIT ELSE BEGIN Ti DIES END; END IF;
Metóda WOUND –WAIT V tejto metóde je mladšej transakcii dovolené čakať na staršiu transakciu, a keď staršia transakcia žiada o objekt, ktorí drží mladšia transakcia, tak staršia transakcia zruší mladšiu. Algoritmus tejto metódy: IF TimeStamp( Ti ) < TimeStamp( Tj ) THEN BEGIN Tj IS WOUNDED ELSE BEGIN Ti WAITS END; END IF;