Upload
josephine-stephens
View
21
Download
2
Embed Size (px)
DESCRIPTION
TECHNIKY PARALELNÉHO SPRACOVANIA. Marek Jasa ň 4 ročník ŠPZ. ZÁKLADNÉ POJMY. Definícia – Rozvrh - PowerPoint PPT Presentation
Citation preview
TECHNIKY PARALELNÉHO SPRACOVANIATECHNIKY PARALELNÉHO SPRACOVANIA
Marek Jasaň
4 ročník
ŠPZ
ZÁKLADNÉ POJMYZÁ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í : Oij 1 Okl
potom Oij 2 Okl.
Definícia – permutovateľné operácie
Dve operácie Oij a Okl sú permutovateľné ( zameniteľné) vtedy keď
ich vykonanie v poradí
Oij Okl dáva rovnaké výsledky, ako Oij Okl.
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 transakciPrecedencia 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í Oik Ojl ,
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.
Obr 1) Ukážka grafu precedencie
PROBLÉMY SÚVISIACE S PARALELNÝM PROBLÉMY SÚVISIACE S PARALELNÝM
SPRACOVANÍMSPRACOVANÍ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 protokolovDruhy protokolov::
ZamykanieČasové pečiatky
ZamykanieZamykanie
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 pOblasti pôsobnosti zámkov (Informix)ô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.
S X -
S Y Y Y
X N N N
- Y Y Y
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é zamykanieDvojfá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 :
1) konzervatívne dvojfázové zamykanie – zámky na všetky objekty sú pridelené na zčiatku vykonania transakcie
2) 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Č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Ú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Č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;
UviaznutieUviaznutie
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 -DIEMetó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 –WAITMetó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;