Tietokantarakenteet ja -algoritmit 6. harjoitus Malliratkaisut 1.. a) T1 = B I[b, r 2, 0, 0] IX-lukitaan järjestelmä s, tietokanta b ja relaatio (b, r 2 ) (tässä järjestyksessä), X-lukitaan (b, r 2, 0) ja (b, r 2, 1), lisätään monikko (0,0) relaatioon (b, r 2 ) ja vapautetaan avaimen (b, r 2, 1) X-lukko. I[b, r 1, XV ] IX-lukot s:ään ja b:hen T 1 :llä jo on; X-lukitaan (b, r 1 ) ja (b, r 2 ), luodaan relaatio r 1 (XV ) tietokantaan b ja pudotetaan relaation (b, r 2 ) lukko takaisin IX-lukoksi. I[b, r 1, 1, 1] IX-lukko s:ään T 1 :llä jo on, ja relaatioon (b, r 1 ) T 1 :llä on IX-lukkoa korkeampi X-lukko, joten monikkokohtaisia X-lukkoja ei ole tarpeen varata lainkaan. Lisätään monikko (1,1) relaatioon (b, r 1 ). C Vapautetaan T 1 :n hallussa olevat lukot avaimiin (b, r 2, 0), (b, r 2 ), (b, r 1 ), b ja s. b) T2 = B R[b, r 2, x, 1, v] IS-lukitaan s, b ja (b, r 2 ) (tässä järjestyksessä), S-lukitaan (b, r 2, x), luetaan tietue (b, r 2, x, v). W [b, r 2, 2, u, v] IX-lukitaan s, b ja (b, r 2 ) (tässä järjestyksessä, IS-lukot korotetaan IX-lukoiksi), X-lukitaan (b, r 2, 2) ja päivitetään monikko (2,u) monikoksi (2,v). C Vapautetaan T 2 :n hallussa olevat lukot avaimiin (b, r 2, 1), 1
(b, r 2, 2), (b, r 2 ), b ja s. c) Kyllä ajoitus on mahdollinen. 2
2. a) Pitkäkestoinen X-lukko relaatioon r ja lyhytkestoinen X-lukko r:n seuraajaan. b) Pitkäkestoinen IS-lukko r:ään ja pitkäkestoinen S-lukko avaimeen (r,x). c) Count-kyselyä varten pitkäkestoinen S-lukko r:ään (tai pitkäkestoinen IS-lukko r:ään ja pitkäkestoiset S-lukot kaikkiin r:n monikoihin, mikä on työlästä). Insert-operaatiota varten r:n S-lukko (vast. IS-lukko) korotetaan SIX-lukoksi (tai vast. IS-lukko IX-lukoksi) ja varataan pitkäkestoinen X-lukko avaimeen (r,122) ja lyhytkestoinen X-lukko avaimen (r,x) seuraajaan. Haittoja siitä, ettei lukituksessa oteta huomioon relaatiotason yläpuolella olevia rakeisuustasoja: Tietokannoissa voi esiintyä haamurelaatioita ja järjestelmässä haamutietokantoja. Toinen haitta on lukituksen tehottomuus: paljon lukkoja alemmilla tasoilla. 3
3. Kohdistimen vakaudella ajettava transaktio T: B: T alkaa. R[x 1 ]: T:lle S-lukko avaimeen x 1. T:n S-lukko avaimeen x 1 vapautetaan, koskei x 1 :tä päivitetä. R[x 2 ]: T:lle S-lukko avaimeen x 2. W [x 2 ]: T:n S-lukko avaimeen x 2 korotetaan pitkäkestoiseksi X-lukoksi. R[x 3 ]: T:lle S-lukko avaimeen x 3. T:n S-lukko avaimeen x 3 vapautetaan, koskei x 3 :a päivitetä. C: T sitoutuu. T:n X-lukko avaimeen x 2 vapautetaan. 4
4. a) Täysin eristyneesti: B: T alkaa. R[x 1 ]: T:lle U-lukko avaimeen x 1. T:n U-lukko avaimeen x 1 lasketaan S-lukoksi, koskei x 1 :tä päivitetä. R[x 2 ]: T:lle U-lukko avaimeen x 2. W [x 2 ]: T:n U-lukko avaimeen x 2 korotetaan X-lukoksi. R[x 3 ]: T:lle U-lukko avaimeen x 3. T:n U-lukko avaimeen x 3 lasketaan S-lukoksi, koskei x 3 :a päivitetä. C: T sitoutuu. Vapautetaan T:n lukot: x 1 :n S-lukko, x 2 :n X-lukko ja x 3 :n S-lukko. b) Kohdistimen vakaudella: B: T alkaa. R[x 1 ]: T:lle U-lukko avaimeen x 1. T:n U-lukko avaimeen x 1 vapautetaan, koskei x 1 :tä päivitetä. R[x 2 ]: T:lle U-lukko avaimeen x 2. W [x 2 ]: T:n U-lukko avaimeen x 2 korotetaan X-lukoksi. R[x 3 ]: T:lle U-lukko avaimeen x 3. T:n U-lukko avaimeen x 3 vapautetaan, koskei x 3 :a päivitetä. C: T sitoutuu. T:n X-lukko avaimeen x 2 vapautetaan. 5
5. Luku-kirjoitusmallissa kaikki täyteen eristyneisyyteen tarvittavat X-lukot saadaan hankituksi lokikirjauksista. Avainvälimallissa tämä on mahdollista vain, jos poisto-operaation D[x,v] lokikirjaukseen laitetaan myös avaimen x seuraaja-avain y. Operaation D[x,v] käänteisoperaation näet pitää suorittaa x:n seuraajaan y hankitun X-lukon turvin. Ks. luentojen sivu 155. Peruuntuvalle transaktiolle ei kuitenkaan voida hankkia S- lukkoja niiden etenemisvaiheessa mahdollisesti tekemien lukuoperaatioidensa suojaksi. Tämä voi aiheuttaa sen, että järjestelmään tuleva uusi transaktio tekee päivitysoperaation avaimeen x ennen kuin sitä lukenut peruuntuva transaktio ehtii päättää peruutuksensa. Tekeekö tämä päivitys siis lukuoperaatiosta toistokelvottoman. Vastaus on: ei. Olemme näet sulkeneet tämän tilanteen pois toistokelvottoman luvun määritelmästä (luentojen sivu 102). Perusteluna on, ettei tämä tilanne missään tapauksessa voi aiheuttaa mitään eheyden rikkoumaa. Siis peruuntuvienkin transaktioiden suoritus on täysin eristynyttä. 6
6. ts(t1) = 1, ts(t2) = 2, ts(t3) = 3. a) B1 W 1 [1] : wts(1) := 1 R 1 [2]rts(2) := 1 B 2 W 2 [2] Havaitaan, että avaimen 2 tuorein lukija T 1 on eri kuin T 2 ja aktiivinen, joten T 2 keskeytetään. Näin estyy toistokelvoton luku. b) B1 R 1 [1] : rts(1) := 1. B 2 R 2 [1] : rts(1) := 2. C 2 B 3 W 3 [1] Havaitaan, että avaimen 1 tuorein lukija T 2 on T 3 :a aikaisempi ja sitoutunut, joten operaatio W 3 [1] hyväksytään, vaikka se tekeekin T 1 :n operaatiosta R 1 [1] toistokelvottoman. wts(1):=3. C 3 W 1 [4] : wts(4) := 1. Tämä päivitys voi perustua operaation R 1 [1] lukemaan epäajankohtaiseen arvoon. C 1 Miten estettäisiin toistokelvottomat luvut? Vai onko lainkaan tarpeen, ts. voiko niistä olla haittaa? c) B 1 B 2 W 2 [1] : wts(1) := 2. C 2 R 1 [1] Havaitaan, että T 1 :tä myöhäisempi transaktio T 2 on jo kirjoittanut avaimen 1, joten T 1 peruutetaan. 7
Ajoituksessa ei ole eristyneisuusanomalioita. Lukituskäytännössä ajoitus onkin mahdollinen. 8