Tietokantarakenteet ja -algoritmit 5. harjoitus Malliratkaisut 1. B 1 : T 1 alkaa. I 1 [1]: T 1 :lle pitkäkestoinen X-lukko avaimeen 1 ja lyhytkestoinen X-lukko avaimen 1 seuraajaan. B 2 : T 2 alkaa. I 2 [2]: T 2 :lle pitkäkestoinen X-lukko avaimeen 2 ja lyhytkestoinen X-lukko avaimen 2 seuraajaan. B 3 : T 3 alkaa. I 3 [3]: T 3 :lle pitkäkestoinen X-lukko avaimeen 3 ja lyhytkestoinen X-lukko avaimen 3 seuraajaan. A 2 : T 2 keskeytyy. I2 1 [2]: T 2 poistaa avaimen 2 tietokannasta siihen omistamansa X-lukon turvin. C 2 : T 2 päättää peruutuksensa ja vapauttaa lukkonsa. C 3 : T 3 sitoutuu ja vapauttaa lukkonsa. I 1 [2]: T 1 :lle pitkäkestoinen X-lukko avaimeen 2 ja lyhytkestoinen X-lukko avaimen 2 seuraajaan 3. Ajoitus on mahdollinen. Tietokannassa lopuksi avaimet 1, 2 ja 3. Transaktioiden sarjallistuvuusjärjestyksiä on kolme: T 2 T 1 T 3, T 2 T 3 T 1, T 3 T 2 T 1 (ts. T 2 ennen T 1 :tä). Huomaa, että ajoitus johtaisi lukkiumaan, jos käänteisoperaatiolle I2 1 [2] pitäisi varata lukkoja kuten etenevän vaiheen D 2 [2]:lle. 1
2. B 1 : T 1 alkaa. D 1 [0]: T 1 :lle lyhytkestoinen X-lukko avaimeen 0 ja pitkäkestoinen X-lukko avaimen 0 seuraajaan. A 1 : T 1 keskeytyy. D1 1 [0]: T 1 palauttaa avaimen 0 tietokantaan seuraajan X- lukon turvin. B 2 : T 2 alkaa. R 2 [0]: T 2 :lle pitkäkestoinen S-lukko avaimeen 0. Onnistuu! C 2 : T 2 sitoutuu. T 2 vapauttaa avaimen 0 lukkonsa. C 1 : T 1 päättää peruutuksensa. T 1 vapauttaa avaimen lukkonsa. R 2 [0] ei ole likainen luku, sillä avaimelle 0 on jo palautettu sen alkuperäinen arvo. 2
3. B 1 : T 1 alkaa. D 1 [0]: T 1 :lle lyhytkestoinen X-lukko avaimeen 0 ja pitkäkestoinen X-lukko avaimen 0 seuraajaan. I 1 [0]: T 1 :lle pitkäkestoinen X-lukko avaimeen 0. D 1 [0]: T 1 pitää kummankin X-lukkonsa. A 1 : T 1 keskeytyy. D1 1 [0]: T 1 palauttaa avaimen 0 tietokantaan seuraajan X- lukon turvin. B 2 : T 2 alkaa. R 2 [0]: T 2 yrittää varata pitkäkestoista S-lukkoa avaimeen 0. Tämä ei onnistu, vaan T 2 joutuu odottamaan. Ajoitus ei siis ole mahdollinen. Huomaa, ettei avain 0 vielä ole sitoutunut siinä vaiheessa, kun D1 1 [0] on suoritettu. Vielä on avaimen 0 päivityksiä T 1 :ssä peruuttamatta. R 2 [0] on likainen luku. 3
4. Ajoituksessa B 1 D 1 [1]B 2 I 2 [2] ei ole yhtään eristyneisyysanomaliaa, mutta se ei kuitenkaan ole mahdollinen avainvälilukituskäytännössä: Tietokannassa {(1, 1), (3, 3)} ajettuna T 2 ei voi saada lyhytkestoista X- lukkoa avaimen 2 seuraajaan 3, koska T 1 :llä on siihen pitkäkestoinen X-lukko (otettu operaatiota D 1 [1] varten). 4
5. Olkoot T 1 ja T 2 eteneviä tai sitoutuneita transaktioita. T 2 :n likainen kirjoitus: T 1 päivittää avaimella x varustettua monikkoa, minkä jälkeen, T 1 :n ollessa vielä aktiivinen, T 2 päivittää avaimella x varustettua monikkoa....w 1 [x]...w 2 [x]... T 2 :n likainen luku: (1) T 1 päivittää monikkoa (x,a,v), minkä jälkeen, T 1 :n ollessa vielä aktiivinen, T 2 lukee operaatiolla R[x, a, v ] monikon (x, a, v )....W 1 [x]...r 2 [x]... (2) T 1 päivittää monikkoa (x,a,v), minkä jälkeen, T 1 :n ollessa vielä aktiivinen, T 2 lukee operaatiolla R[a,s] monikkojoukon s....w 1 [x, a, v, a, v ]...R 2 [a, s]... (3) T 1 päivittää monikon (x,a,v) monikoksi (x, a, v ), minkä jälkeen, T 1 :n ollessa vielä aktiivinen, T 2 lukee operaatiolla R[a, s] monikkojoukon s....w 1 [x, a, v, a, v ]...R 2 [a, s]... T 1 :n toistokelvoton luku: (1) T 1 lukee operaatiolla R[x,a,v] monikon (x,a,v), minkä jälkeen, T 1 :n ollessa vielä aktiivinen, T 2 päivittää avaimella x varustettua monikkoa....r 1 [x]...w [x]... (2) T 1 lukee operaatiolla R[a,s] monikkojoukon s, minkä jälkeen, T 1 :n ollessa vielä aktiivinen, T 2 päivittää monikkoa (x,a,v)....r 1 [a, s]...w [x, a, v, a, v ]... 5
(3) T 1 lukee operaatiolla R[a, s] monikkojoukon s, minkä jälkeen, T 1 :n ollessa vielä aktiivinen, T 2 päivittää monikon (x,a,v) monikoksi (x, a, v )....R 1 [a, s]...w 2 [x, a, v, a, v ]... Yleisessä tapauksessa, so. kun T 1 tai T 2 voi olla myös peruuntuva tai peruutuksensa päättänyt, anomaliat määritellään muokaten luentojen sivujen 100-102 määritelmät tähän transaktiomalliin. Tarkastellaan ensin lukituskäytäntöä, jossa W- ja R-operaatioita varten varataan lukkoja seuraavasti: W[x]: pitkäkestoinen X-lukko avaimeen x. R[x,a,v]: pitkäkestoinen S-lukko avaimeen x. R[a,s]: pitkäkestoinen S-lukko s:n jokaisen monikon (x,a,v) avaimeen x. Tämä lukituskäytäntö estää likaiset kirjoitukset, muotoa (1) tai (3) olevat likaiset luvut sekä muotoa (1) tai (2) olevat toistokelvottomat luvut, muttei muotoa (2) olevia likaisia lukuja eikä muotoa (3) olevia toistokelvottomia lukuja. Muotoa (2) olevat likaiset luvut estyvät, jos operaatiota W [x, a, v, a, v ] varten varataan pitkäkestoinen X-lukko attribuuttiarvoon a ja operaatiota R[a,s] varten vähintään lyhytkestoinen S-lukko a:han. Muotoa (3) olevat toistokelvottomat luvut estyvät, jos operaatiota R[a,s] varten varataan pitkäkestoinen S-lukko attribuuttiarvoon a ja operaatiota W [x, a, v, a, v ] varten vähintään lyhytkestoinen X-lukko arvoon a. 6