Helsingin Yliopisto, Tietojenkäsittelytieteen laitos Tietokannan hallinta, kurssikoe 11.6.2004, J. Lindström Ratkaisuehdotuksia 1. Hakemistorakenteet, 15p. Tutkitaan tyhjää B+-puuta, jossa jokaiselle hakemistosivulle ja lehtisivulle mahtuu (2..4) avainta. (a) Piirrä näkyviin kuinka puuta muokataan kun puuhun lisätään avaimet, 23,,, 51, 6,, 27, 13, 7, 9, 17,, 15, 24, 49,, and 13. Piirrä välivaiheita näkyviin ainakin kun sivuja halkaistaan tai puun korkeus kasvaa. 8p. Lisätään avainarvot, 23, ja, jotka kaikki mahtuvat juuritasolle: 23 Lisätään avainarvo 61, joka aiheuttaa juuritason (= lehtitaso) halkeamisen. Luodaan uusi solmu ja jaetaan avainarvot solmujen kesken. Kopioidaan uuden solmun pienen arvo hakemistotasolle viitaksi (avainarvo ): 23 61 Lisätään avainarvo 6, joka mahtuu lehtitasolle: 6 23 61 Lisätään avainarvo, joka aiheuttaa lehtitason halkeamisen. Luodaan uusi solmu ja jaetaan avainarvot solmujen kesken. Kopioidaan uuden lehtisolmun pienin arvo ylemmälle tasolle viitaksi (avainarvo ): 6 23 61 1
Lisätään avainarvot 27 ja 13, jotka molemmat mahtuvat lehtitasojen sivuille: 6 13 23 27 61 Lisätään avainarvo 7, joka aiheuttaa lehtitason halkeamisen. Luodaan uusi solmu ja jaetaan avainarvot solmujen kesken. Kopioidaan uuden lehtisolmun pienin arvo ylemmälle tasolle viitaksi (avainarvo ): 6 7 13 23 27 61 Lisätään avainarvot 9 ja 17 jotka mahtuvat lehtitasolle: 6 7 9 13 17 23 27 61 Lisätään avainarvo, joka aiheuttaa lehtitason halkeamisen. Luodaan uusi solmu ja jaetaan avainarvot solmujen kesken. Kopioidaan uuden lehtisolmun pienin arvo ylemmälle tasolle viitaksi (avainarvo ): 6 7 9 13 17 23 27 61 Lisätään avainarvot 15, 24, 49, ja 13 jotka mahtuvat lehtitasolle: 6 7 9 15 13 13 17 24 23 27 49 61 Valmista! 2
(b) Miten näin saadusta puusta haettaisiin avainarvoa 14? 2p. Verrataan hakuavainta 14 juuritason ensimmäiseen avaimeen. Koska 14 > jatketaan vertailua juuritasolla. Koska 14 < seuraataan avaimen viittaa alas. Tullaan lehtitasolle. Verrataan hakuavainta 14 ensin avainarvoon. Koska 14, jatketaan vertailua seuraavasta arvosta. Koska 13 14, jatketaan vertailua seuraavasta arvosta. Koska 13 14, jatketaan vertailua seuraavasta arvosta. Koska 15 > 14, tiedetään ettei hakuavainta voi olla puussa ja voidaan palauttaa virheilmoitus. (c) Piirrä näkyviin kuinka puuta muokataan kun (a)-kohdasta saadusta puusta poistetaan avaimet: 13, 7, 6,,, 13, 17 ja 9. Piirrä välivaiheita näkyviin ainakin kun sivuja yhdistellään tai puun korkeus laskee. 5p. Poistetaan avainarvot 13 ja 7, poistot ei aiheuta lehtitason alivuotoa. Sen sijaan avainarvon 6 poisto aiheuttaa alivuodon: 9 15 13 17 24 23 27 49 61 Koska vasemmanpuolisen veljen ja käsittelyssä olevan solmun avainten lukumäärä on vähemmän tai yhtäsuuri kuin solmun avainten maksimimäärä, yhdistetään solmut. Tyhjäksi jäänyt solmu poistetaan puusta, jolloin myös hakemistotasolla oleva viitta poistetaan (avainarvo ): 9 15 13 17 24 23 27 49 61 Poistetaan avainarvot,, 13 ja 17 jotka ei aiheuta lehtitason alivuotoa: 9 15 24 23 27 49 61 Poistetaan avainaro 9, joka aiheuttaa lehtitason alivuodon. Koska vasemmanpuolisen veljen ja käsittelyssä olevan solmun avainten lukumäärä on vähemmän tai yhtäsuuri kuin solmun avainten maksimimäärä, yhdistetään solmut. Tyhjäksi jäänyt solmu poistetaan puusta, jolloin myös hakemistotasolla oleva viitta poistetaan (avainarvo ). 3
15 24 23 27 49 61 Puu on valmis! 2. Elvytys, 15p. Oletetaan että lokin sisältö romahduspisteessä on seuraava: 99: < checkpoint > 0: < start, T 1 > 1: < write, T 1, P 5, 0 > 2: < start, T 2 > 3: < write, T 2, P 5, 0 > 4: < commit, T 2 > 5: < end, T 2 > 6: < start, T 3 > 7: < write, T 3, P 3, 1 > 6: < abort, T 1 > Mitä operaatioita sisältyy tästä tilanteesta alkavaan elvytykseen? Kuvaa elvytyksen eri vaiheet ja listaa konkreettisesti tehtävät operaatiot perustellen miksi ne operaatiot tehtiin ja miksi joitain operaatioita jätettiin tekemättä. Oletetaan, että tietoalkion P 5 sisältävän sivun P agelsn = 1, tietoalkion P 3 sisältävän sivun P agelsn = 7. Oletetaan että lokimerkinnät ovat muotoa < operaatio, transaktio, tietoalkio, alkukuva >. Lisäksi oletetaan että viimeisen lokikirjauksen LSN on 8 (virhe tehtävänannossa). Toipuminen aloitetaan lukemalla lokia alusta loppuun ja muodostetaan kaksi transaktiolistaan. Keskeytyneet-listaan kerätään ne transaktiot joille lokissa on start merkintä mutta ei commit merkintää eika abort merkinää ennen viimeistä checkpoint merkintää. Sioutuneetlistaan kerätään ne transaktiot joille lokissa on commit merkintä viimeisen checkpoint merkinnän jälkeen. Tehtävässä viimeinen chekpoint on ennen kaikkia operaatioita. Eli tehtävässä keskeytyneet = {T 1, T 3 } ja sitoutuneet = {T 2 }. Tämän jälkeen aloitetaan undo-vaihe, jossa keskeneräisten transaktioiden suorittamat muutokset perutaan lukemalla lokia lopusta alkuun. Tässä pitää huomioida PageLSN:t. Rivillä 7 olevaa kirjoitus pitää perua koska P agelsn = 7 7. Eli suoritetaan operaatio < write, P 3, 1 > ja tehdään lokikirjaus 9 :< write, T 3, P 3, 1 >. Rivillä 1 oleva kirjoitus pitää perua koska P agelsn = 1 1. Perutaan transaktio T 3 eli tehdään lokikirjaukset, 1 :< abort, T 3 > ja 111 :< end, T 3 >. Eli suoritetaan operaatio < write, P 5, 0 > ja tehdään lokikirjaus 112 :< write, T 1, P 5, 0 >. Perutaan vielä transaktio T 1 eli tehdään lokikirjaukset 113 :< abort, T 1 > ja 114 :< end, T 1 >. Muita operaatioita ei olekkaan. 4
Tämän jälkeen aloitetaan redo-vaihe, jossa sitoutuneiden transaktioiden tekemät muutokset suoritetaan uudestaan käymällä lokia alusta loppuun. Huomioidaan taas PageLSN:t. Rivin 3 kirjoitusta pitää uusia silla P agelsn = 7 3. Joten suoritetaan kirjoitus < write, P 3, 0 > ja tehdään lokikirjaus 114 :< write, T 2, P 3, 0 >. Lopuksi otetaan vielä checkpoint ja tehdään lokikirjaus 120 :< checkpoint >. 3. Kyselynkäsittely, 15p. Olkoon annettuna seuraava relaatiokaavio ja SQL-kysely. Suppliers(sid: integer, sname: char(80), city: char(80)); Supply(sid: integer, pid: integer); Parts(pid: integer, pname: char(80), price: real); SELECT S.sname, P.pname FROM Suppliers S, Parts P, Supply Y WHERE S.sid = Y.sid AND Y.pid = P.pid AND S.city = Madison AND P.price 1,000; (a) Anna kyselyä vastaava relaatioalgebramuotoinen lauseke ja piirrä lauseketta vastaava kyselypuu. (b) Optimoi kyselyä heuristisilla säänöillä kirjoittaen näkyviin sekä miten kyselyä olet muokannut että mihin sääntöön muokkaus perustuu ja piirä näkyviin optimoitu lauseketta vastaava kyselypuu. (c) Kerro kuinka suorittaisit kyselyn, jos jokaisesta relaatiosta tiedetään että se talletettu järjestämättömään kasarakenteeseen peräkkäistalletuksella. Mitkä hakemistot nopeuttaisivat kyselyn suoritusta? 3p Katso vastaukset kevään 2006, harjoitus 4 ratkaisuista! 4. Tapahtumankäsittely, 15p. (a) Anna esimerkki historiasta, joka on sarjallistuva mutta jota ei voi suorittaa täsmälleen samassa järjestyksessä tiukalla 2PL menetelmällä. 4p. H = r 1 [x]w 2 [x]r 1 [y]c 1 c 2 (b) Olkoon historia H = w 1 [x]r 2 [y]w 1 [y]w 2 [y]r 1 [z]w 1 [x]r 2 [y]c 1 c 2. Mitä eristyneisyysanomalioita historiassa esiintyy? Piirrä näkyviin historiaa vastaava sarjallistuvuusverkko ja perustele sen avulla onko historia konfliktisarjallistuva? 5p. Historia sisältää toistokelvottoman luvun r 1 [y] (koska w 2 [y]) ja häviävän kirjoituksen (lost update) w 1 [y] (koska w 2 [y]). Historiaa vastaava sarjallistuvuusverkko olisi: 5
r2[y] w1[y] T1 T2 w1[y] w2[y] Koska sarjallistuvuusverkko on syklinen historia ei ole sarjallistuva ja siis ei voi olla konfliktisarjallistuva. (c) Anna esimerkki historiasta, jossa esiintyy ketjuperuutus. 2p. (Huom: kirjoita esimerkkiin näkyviin vain välttämättömät operaatiot ja perustele mikä operaatio aiheuttaa likaisen luvun). H = w 1 [x]r 2 [x]w 2 [x]a 1 a 2, tässä T 2 pitää peruuttaa koska se on lukenut tietoalkion x arvon, joka perutaan. Siis syntyy ketjuperuutus. (d) Anna esimerkki historiasta, jossa käytetään tiukkaa 2PL-menetelmää ja jossa esiintyy lukkiutuma. Piirrä näkyviin odotusverkko (wait-for graph). 4p. H = r 1 [x]r 2 [y]w 1 [y]w 2 [x]. Odotusverkko olisi: r1[x] w2[x] T1 T2 r2[y] w1[y] 6