|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Dvoufßzov² uzamykacφ protokol
Dnes ukß₧eme, ₧e je mo₧nΘ konstruovat transakce podle jist²ch pravidel tak, ₧e za urΦit²ch p°edpoklad∙ bude ka₧d² jejich rozvrh uspo°ßdateln². Soustav∞ takov²ch pravidel se obecn∞ °φkß protokol. P°ipome≥me, ₧e uspo°ßdatelnost znamenß ekvivalenci n∞jakΘmu sΘriovΘmu zpracovßnφ mno₧iny transakcφ. Nejznßm∞jÜφ protokoly jsou zalo₧eny na dynamickΘm zamykßnφ a odmykßnφ objekt∙ v databßzi. Zamykßnφ (operace LOCK) je akce, kterou vyvolß transakce na objektu, aby ho ochrßnila p°ed p°φstupem od ostatnφch transakcφ. Vedle dynamickΘho p°φstupu existuje samoz°ejm∞ i statickΘ zamykßnφ a odmykßnφ objekt∙, co₧ znamenß, ₧e objekty pou₧φvanΘ v transakci jsou vÜechny uzamknuty na poΦßtku provßd∞nφ transakce a odemknuty t∞sn∞ p°ed ukonΦenφm transakce. V tomto p°φstupu mohou b²t z°ejm∞ paraleln∞ provßd∞ny pouze takovΘ transakce, kterΘ nejsou konfliktnφ, tj. nesdφlφ ₧ßdnΘ objekty. Odemknutφ (operace UNLOCK) je akce uvol≥ujφcφ objekt pro zpracovßnφ dalÜφmi transakcemi. Transakce, kterß uzamkla objekt, mß prßvo na n∞m provßd∞t operace READ a WRITE (a dalÜφ operace). Budeme uva₧ovat jednoduch² model, kdy objekt m∙₧e b²t v danΘm Φase uzamΦen nejv²Üe jednou transakcφ. Objekt bude nutnΘ mφt v transakci uzamknut², kdykoliv k n∞mu chce tato transakce p°istupovat. Transakce se nebudou pokouÜet uzamknout objekt ji₧ uzamknut² jinou transakcφ (jinak musφ Φekat, a₧ je objekt odemknut a to toutΘ₧ transakcφ, kterß ho zamkla). Rozvrhy spl≥ujφcφ druhou podmφnku budeme naz²vat legßlnφ. Nelegßlnφ rozvrh je takov², kter² nenφ legßlnφ. SamotnΘ uzamykßnφ a odmykßnφ libovoln²m zp∙sobem jeÜt∞ nevedou k uspo°ßdatelnΘmu rozvrhu. V p°φpadech n∞kter²ch nelegßlnφch rozvrh∙ m∙₧e dokonce nastat uvßznutφ (deadlock). V jednΘ transakci chceme uzamknout to, co je ji₧ uzamknutΘ druhou transakcφ a naopak. P°ipomφnß to situaci na k°i₧ovatce bez znaΦek p°ednosti v jφzd∞, kdy vÜichni stojφ, Φekajφ na uplatn∞nφ p°ednosti zprava a nikdo nem∙₧e vyjet jako prvnφ. Rozvrh S1 (torzo) v tabulce 1 pro prvnφch n∞kolik operacφ transakcφ T1 a T2 ukazuje uvßznutφ. S1
Tab. 1 P°φklad uvßznutφ Z°ejm∞ v okam₧iku, kdy v T2 je uzamykßn objekt B, nelze rozvrhnout T1 tak, aby mohlo nastat LOCK(B). Prvnφch 6 krok∙ rozvrhu S1 ji₧ tedy p°edurΦuje uvßznutφ. Na rozdφl od situace na k°i₧ovatce, kdy se jeden z °idiΦ∙ dohod∞ s druh²m a dß mu p°ednost, se uvßznutφ v transakΦnφm zpracovßnφ obvykle °eÜφ tak, ₧e se provede ROLLBACK jednΘ transakce. Pak to, co bylo uzamknuto touto transakcφ, bude odemknuto a lze pokraΦovat ve zpracovßnφ druhΘ transakce. Nßm∞t na "nad∞jn∞jÜφ" rozvrh naznaΦuje nßsledujφcφ ·vaha: kdyby v T1 byly p°edposlednφ dv∞ operace vym∞n∞ny, staΦilo by "pozdr₧et" T2, v T1 odemknout B a pokraΦovat v provßd∞nφ T2. ╪eÜenφ s likvidacφ jednΘ transakce ovÜem nenφ nejvhodn∞jÜφ nap°. tehdy, kdy₧ druhß transakce je dlouhß. Byly proto vyvinuty jinΘ metody pro °eÜenφ uvßznutφ nebo dokonce pro prevenci uvßznutφ. Omezφme se dßle na tzv. dob°e formovanΘ transakce, kterΘ podporujφ p°irozenΘ po₧adavky na transakce:
Mßme-li mno₧inu dob°e formovan²ch transakcφ, stßle jeÜt∞ neznßme postaΦujφcφ podmφnku pro to, aby vÜechny legßlnφ rozvrhy byly uspo°ßdatelnΘ. Konzistence databßze toti₧ nenφ zaruΦena tφm, ₧e objekt odemkneme bezprost°edn∞ po manipulaci s nφm. Mezi dnes ji₧ klasickΘ v²sledky databßzovΘ teorie pat°φ tvrzenφ, ₧e k zajiÜt∞nφ uspo°ßdatelnosti vÜech legßlnφch rozvrh∙ staΦφ, aby vÜechny transakce v mno₧in∞ uva₧ovan²ch transakcφ byly dvoufßzovΘ, neboli, aby ka₧dß transakce spl≥ovala tzv. dvoufßzov² (uzamykacφ) protokol. Uzamykacφ protokol je obecn∞ mno₧ina pravidel, kterΘ udßvajφ, kdy transakce bude uzamykat a odmykat objekty databßze. Dvoufßzovß transakce v prvnφ fßzi uzamykß vÜe, co je pot°eba, a od prvnφho odemknutφ (druhß fßze) se transakcφ zamknutΘ objekty pouze odmykajφ, tj. nenφ ji₧ pou₧ito ₧ßdnΘ operace LOCK. Tedy transakce musφ mφt vÜechny objekty uzamΦenΘ p°ed tφm, ne₧ n∞jak² objekt odemkne. Platφ dokonce, ₧e v p°φpad∞, kdy nenφ nic znßmo o sΘmantice transakcφ, je dvoufßzovost transakcφ dokonce nutnou podmφnkou pro zachovßnφ konzistence databßze. To ovÜem nevyluΦuje p°φpad, ₧e n∞kdy lze nalΘzt legßlnφ rozvrh nedvoufßzov²ch transakcφ, kter² je uspo°ßdateln². Tabulka 2 ukazuje mo₧n² uspo°ßdateln² rozvrh dvoufßzov²ch transakcφ T3 a T4.
Tab. 2 P°φklad rozvrhu dvoufßzov²ch transakcφ V danΘm rozvrhu T4 jednou Tab. 1 P°φklad uvßznutφ Φekß na uvoln∞nφ zßmku pro A, jednou na uvoln∞nφ zßmku pro B. V opaΦnΘm p°φpad∞, tj. kdyby operace LOCK(A), resp. LOCK(B) byly v rozvrhu umφst∞ny p°ed UNLOCK(A), resp. UNLOCK(C) transakce T3, rozvrh by se stal nelegßlnφm. Na obrßzku 1 je ukßzßno, jak m∙₧e vypadat odpovφdajφcφ volßnφ operacφ v Φase vΦetn∞ Φekßnφ na uvoln∞nφ zßmk∙.
po₧aduje a dostane po₧aduje a dostane zßmek na A zßmek na C T3 ¯ ¯ uvol≥uje uvol≥uje zßmek na A zßmek na C
dostane po₧aduje a dostane zßmek na A zßmek na C T4 ¯ ¯ po₧aduje a dostane po₧aduje zßmek na A uvol≥uje zßmek na B je blokovßna (Φekß) zßmek na A,B,C Obr. 1 Soub∞₧nΘ volßnφ transakcφ T3 a T4 Protokol, ve kterΘm je ka₧dß transakce dvoufßzovß, se naz²vß dvoufßzov² uzamykacφ protokol. Dvoufßzov² protokol tedy tvo°φ pouze jednu z mo₧n²ch postaΦujφcφch podmφnek pro uspo°ßdatelnost ka₧dΘho legßlnφho rozvrhu. Existujφ i jinΘ, nedvoufßzovΘ protokoly zaruΦujφcφ tuto vlastnost a korektnost dalÜφch (v naÜem modelu) neuspo°ßdateln²ch rozvrh∙. Na prost°edφ transakcφ vÜak musφ b²t kladeny dalÜφ (sΘmantickΘ) po₧adavky. Jejich znalost je pak vyu₧ita v protokolech. Pozor ale, snadno lze nalΘzt p°φklad, kter² dokazuje, ₧e dvoufßzovost nemusφ zajiÜ¥ovat nep°φtomnost uvßznutφ, kterß jsou pro dvoufßzovΘ uzamykßnφ dost typickß. U dvoufßzov²ch uzamykacφch protokol∙ jim lze zamezit nap°. p°i°azenφm priorit transakcφm a Φekßnφm na transakce s vyÜÜφ prioritou. DalÜφm problΘmem je tΘ₧ kaskßdovΘ ruÜenφ transakcφ. Provede-li se ROLLBACK transakce T, m∙₧e to znamenat ROLLBACK pro dalÜφ transakce, kterΘ vyu₧φvaly hodnoty aktualizovanΘ transakcφ T. Tento nedostatek se dß odstranit pomocφ striktnφch dvoufßzov²ch protokol∙, kterΘ uvol≥ujφ zßmky a₧ po ukonΦenφ transakce (COMMIT). Nev²hodou t∞chto protokol∙ je ovÜem omezenφ paralelismu. Na druhΘ stran∞ je toto °eÜenφ v souΦasn²ch S╪BD nejobvyklejÜφ. Nev²hodou dvoufßzovΘho uzamykacφho protokolu je, ₧e v₧dy nejv²Üe jedna transakce v Φase uzamykala n∞jak² objekt. Krom∞ uveden²ch zßmk∙ existuje °ada dalÜφch metod zamykßnφ, jako nap°. sdφlenΘ a v²luΦnΘ zßmky. Uzamykßnφ m∙₧e b²t provedeno precizn∞ji, proto₧e se uva₧ujφ rozdφly mezi operacemi READ a WRITE. V²luΦn² zßmek m∙₧e b²t aplikovßn na objekty jak pro operace READ a WRITE, sdφlen² zßmek uzamykß objekty kterΘ chceme pouze Φφst. Vφce typ∙ zßmk∙ vede k uzamykacφho protokolu s podobn²mi vlastnostmi jako p∙vodnφ verze, ovÜem s v∞tÜφm stupn∞m paralelismu. <seznam dφl∙ serißlu> <COMPUTERWORLD> |