581334-4 Tietokannan hallinta Kurssikoe 2.11.2001

Kirjoita jokaisen vastauspaperin yläreunaan nimi, syntymäaika,
nimikirjoitus, kurssin nimi ja päiväys!

Kokeessa ei saa käyttää mitään kirjallista materiaalia.

1.Tietokannan tallennusrakenteissa pyritään yleensä säästämään tilaa
siten, että relaation tallentamiseen tarvitaan niin vähän tilaa kuin
mahdollista.  Eräissä tapauksissa tästä pääperiaatteesta tingitään
kuitenkin selvästi: ISAM-rakenne, B+ -puu ja hajautusrakenne sisältävät
tyypillisesti jaksoja, jotka eivät ole täynnä.  Selitä jokainen mainittu
rakenne siten, että erityisesti tuo tilan 'tuhlaus' ja sen perustelu
selviää.  10 p

Ratkaisu:

1) ISAM-rakenne: perustiedosto järjestyksessä, hakemisto monitasoinen ja
harva (ks.  luennot 3,12-18).  Tilankäyttö: Monikon lisäys täyteen
perusjaksoon aiheuttaa ylivuotojakson käyttöönoton.  Jättämällä
rakennetta luotaessa jokaiseen perustiedoston jaksoon tyhjää (jopa 50%?)
selvitään ilman ylivuotojaksoja varsin pitkään.  Ylivuotojakson vikana
on se, että tietueen haun vaatima levyhakujen määrä kasvaa. 

2) B+ -puu: Tavallaan ISAM-rakenteen vaikeuksien takia on kehitetty
rakenne, jossa periaatteessa kaikki solmut ovat ei-täysiä eli niihin
voidaan lisätä tietueita (avain + osoitin). Perustiedostossa ei tarvitse
vaatia järjestystä. Ks. luennot 3,24-31 (yleiset ominaisuudet).
Tilankäytön kannalta olennainen ominaisuus on vaatimus, että solmu on
aina 50-100% täynnä (p/2..p osoitinta); tasapainotilassa täyttöaste on
69 %.

3) Hajautusrakenne: Perustietueet jaetaan jaksoihin hajauttimen avulla:
jaksoissa voi olla 1..max tietuepaikkaa käytössä. Tilan "tuhlaus" on
tarpeen, ellei hajautin tuota täysin tasaisesti eri soluihin viittaavia
arvoja. Ylivuotojaksoja voi tulla. Myös soluhakemistossa voi olla
tyhjää; jos se on keskusmuistissa, tällä ei ole paljon merkitystä.
(Yleiset ominaisuudet: luennot 2,26-32.)

Arvostelu (Anna):

ISAM: max 3p
- Jos rakenne hallussa mutta tilankäytön selittämisessä ongelmia 2p
- Jos rakenteessa pienehkö virhe mutta tilankäytön perustelut kunnossa 2p
- Jos rakenteessa pienehkö virhe ja tilankäytön perustelussa ongelmia 1p

B+-puu: max 4p
- Jos rakenne hyvin selitetty (tilankäyttöineen) mutta perustelu
tuhlauksen edulle puuttuu tai virheellinen 3p
- Jos rakenteen selitys vajavainen mutta tilankäytöstä on mainintaa 2p
- Jos virheitä molemmissa mutta silti yritetty ja jotain oikeaakin löytyy
1p

Hajautusrakenne: max 3p
- Jos rakenne selitetty mutta tilankäytön selittämisessä ongelmia 2p
- Jos rakenteessa virhe mutta tilankäyttö kunnossa 2p
- Jos molemmissa virheitä tai vajavaisuutta mutta tarpeeksi asiaakin
oikein 1p

2. Oletetaan relaatio
employee(fname, lname, ssn, salary, dno)
ja kysely
        select lname, fname, salary from employee
        where salary > 50000 or dno > 10;

Selitä kyselyn toteutuksen vaiheet ja arvioi tarvittavien levyhakujen 
määrää, kun

a) relaatiolle ei ole mitään hakemistoa,
b) toiselle attribuuteista salary, dno on hakemisto,
c) kummallekin attribuuteista salary, dno on oma hakemisto.

Kohdissa b ja c voit valita hakemistojen tyypit itse; niistä on 
mainittava kyselyn toteutuksen kannalta olennaiset ominaisuudet.  12 p

Ratkaisu: Oletetaan, että relaatiossa on n jaksoa (N monikkoa), ehdon
(salary > 5000) täyttäviä monikkoja on N1 ja ehdon (dno > 5) täyttäviä
monikkoja N2.

a) Jokainen relaation rivi on käytävä läpi ja testattava salary- ja
dno-ehdot. Kun ehdot ovat voimassa, viedään riviltä tulosrelaatioon
lname, fname ja salary. Levyhakuja tulee siis n kappaletta. (Relaation
rivien järjestyksellä ei ole merkitystä eikä kyselyä voida muutenkaan -
operaatioiden järjestyksen kannalta - optimoida.)

b) Oletetaan, että on hakemisto dno-attribuutille. Kysely toteutetaan
kahdessa vaiheessa:

1) Haetaan hakemiston avulla niiden perustiedoston jaksojen osoitteet,
joissa on (dno>10) -tietueita. Tulos on lista L1, jonka avulla saadaan
vastaavat perustietueet. Hakemisto ei voi >-ehdon takia olla
hajautustyyppiä. 

2a) Jos perustiedosto on järjestetty laskevaan palkkajärjestykseen,
käydään sitä läpi niin pitkälle kuin salary > 50000. Voidaan muodostaa
jakso-osoitteiden lista L2 tai (mieluummin, koska on jo haettu
perustietueet) tai suoraan salary-ehdon täyttävien tietueiden lista.
Yhdistetään saadut tietueet ja kohdan 1 perusteella saadut tietueet
tulokseksi. Levyhakujen määrä on N1+N2, mikäli välitulokset voidaan
pitää keskusmuistissa ja mikäli missään jaksossa ei ole enempää kuin
yksi ehdon täyttävä tietue. Käytännössä hakujen määrä on pienempi.
Minimimäärä on 1 (haetaan vain ensimmäinen jakso salary-haussa).

2b) Jos perustiedosto on järjestämätön (tai muu järjestys kuin edellä,
siis sellainen, josta ei ole tässä hyötyä), tulee toisessa vaiheessa
käydä koko relaatio läpi. Tässä tapauksessa kannattaa kysely toteuttaa
kuten kohdassa a eli ei kannata käyttää hakemistoa ollenkaan.

Jos on vain salary-hakemisto, ratkaisu on edellisen kanssa symmetrinen.
(Perustiedoston mahdollisista järjestyksistä todennäköisin on ehkä
nouseva dno-järjestys. Siitä ei ole tässä hyötyä, koska ensimmäinen
(dno>5) -rivi tulee hakea selaamalla rivejä (jaksoja) läpi.)

c) Jos on molemmat hakemistot, muodostetaan jakso-osoitteiden listat L1
ja L2 ja sitten niiden yhdiste. Yhdiste sisältää niiden jaksojen
osoitteet, jotka on haettava tuloksen muodostamiseksi. Levyhakuja 0-n
kappaletta. 

Arvostelu (Pietu):
- tulossa

3.Relaatiossa R on 40 000 kpl 100 tavun monikoita ja relaatiossa S 10 
000 kpl 800 tavun monikoita.  Levymuistin jakso on 4 KB.

a) Mikä on levyoperaatioiden määrä sisäkkäisiin silmukoihin perustuvassa 
R:n ja S:n liitoksessa, kun puskuritilaa on käytettävissä 20 KB?

b) Mikä on liitoksen suoritusaika (sekunneissa) tyypillisellä 
levymuistilla? Karkea arvio riittää, mutta se on perusteltava
selittämällä, kuinka levyoperaation suoritusaika määräytyy.
                                                                10 p


a) Jaksoja R:ssä r = 40000/40 = 1000 ja S:ssä s = 10000/5 = 2000
kappaletta. Puskuritilaa on viidelle jaksolle, joka käytetään
seuraavasti: yksi tuloksen kirjoittamiseen, yksi sisemmän silmukan
jaksojen lukemiseen ja kolme ulomman silmukan jaksojen lukemiseen
(kolmen jakson erissä). Jaksomäärältään pienempi relaatio (R) valitaan
ulompaan silmukkaan, jolloin levyhakuja tarvitaan

(3 + 3 + ... + 1) + (2000 x 334) = 669000.

b) Karkea arvio suoritusajalle (jaksot hajallaan levyllä): 
	kohdistus esim. 		6 ms
	pyörähdysviive (latenssi) 	3 ms (10000 kierrosta/min)
	jakson siirto         (alle)    1 ms
eli yhteensä noin 10 ms. Kyselyn suoritusaika on tällöin 6690 s eli
lähes 2 tuntia. Kohdistus- ja latenssiajoissa voidaan säästää
huomattavasti, jos sisemmässä silmukassa voidaan lukea
jaksoja peräkkäin.

Arvostelu (Janne):
a) Pisteitä on saanut 5 - virheet. Pelkkiä laskuvirheitä ei ole pidetty
virheinä.

Yleisiä virheitä:
- unohdettu se, että myös ulomman silmukan relaatio luetaan

- unohdettu jättää puskuriin tilaa kummallekin relaatiolle, ts. luettu
  aina puskuri täyteen (miten liitos tehdään, kun muistissa on vain
  toisen relaation monikoita?)

(- unohdettu varata tulokselle tilaa puskurista; tämä annettiin
   anteeksi)

b) 3 pistettä levyoperaation osista, 2 aika-arvio(i)sta.

Yleisiä virheitä:
- keksitty tähän yhtäkkiä aivan eri levyhakujen määrä kuin a-kohdassa

- arvioitu osa-aikoja kummallisesti, esim. jakson siirtoaika
  pidemmäksi kuin levyn yhden kierroksen pyörähdys


4. a)

Eristyneisyysongelmat:

rivit 1 ja 4: likainen luku (T1 kirjoittaa X:n, T2 lukee ennen T1:n 
sitoutumista)

rivit 2 ja 3: likainen luku (T2 kirjoittaa Y:n, T1 lukee ennen T2:n 
sitoutumista)

rivit 2 ja 5: likainen kirjoitus (T1 kirjoittaa T2:n (ei sit.) 
kirjoittaman Y:n päälle)

Muita ongelmia ajoituksessa ei ole.

b) Ankara kaksivaiheinen lukitus: lukot vapautetaan vasta
sitoutumisessa.
Tässä tapauksessa tapahtuu seuraavaa:

T1             T2

write_lock(X)
write_item(X)
               write_lock(Y)
               write_item(Y)
read_lock(Y)
               read_lock(X)

T1 saa siis kirjoituslukon X:ään ja T2 Y:hyn. Lukkoja ei vapauteta
heti kirjoittamisen jälkeen. Seuraavaksi T1 jää odottamaan lukulukkoa
Y:hyn (T1 ei saa lukulukkoa, koska T2:lla on kirjoituslukko samaan
alkioon) ja T2 X:ään. Kumpikaan ei pääse etenemään, eli kyseessä on
lukkiuma.

Arvostelu (Janne):

a) 2p/oikea eristyneisyysongelma, väärät ja ylimääräiset -2p/kpl,
yhteensä kuitenkin min 0, max 5 pistettä.

Yleisiä virheitä:
- ylimääräisiä eristyneisyysongelmia

b) max 5 pistett - virheet

Yleisiä virheitä:
- transaktiot pyytävät ja saavat lukkoja, mutta lukoilla ei ole mitään
  vaikutusta

- kerrottu (ankarasta) 2PL:stä yleensä, ei mitä tässä tapauksessa
  tapahtuu

- transaktiot vapauttelevat lukkoja kesken kaiken

- vaihdettu operaatioiden ajoitusta


5. Selitä lyhyesti seuraavat käsitteet ja niiden merkitys elvytyksessä:

a) tarkistuspiste (checkpoint),

b) sitoutumiskäytäntö (commit protocol).  8 p

Ratkaisu: 
a) tarkistuspiste (ks. luennot, s. 5,23-26): tehdään transaktioista
riippumaton "varmistus" viemällä päivitetyt puskurisivut levylle. Lokiin
viedään vastaava checkpoint-tietue ja kirjoitetaan myös loki levylle.
Suorituksen ajaksi estetään transaktioiden suoritus, minkä takia
tarkistuspistettä ei pidä tehdä liian usein. Toisaalta liian pitkä
tarkistuspisteiden väli aiheuttaa sen, että elvytyksessä redo- ja
undo-operaatioita voi tulla paljon.

b) sitoutumiskäytäntö (ks. luennot, s. 5,22..) = onnistuneen transaktion
päättävä toiminto. Ohjelmassa commit-pyyntö aiheuttaa transaktioiden
samanaikaiseen toimintaan liittyviä tarkistuksia. Jos tarkistukset eivät
estä, transaktio sitoutuu ja sen merkiksi lokiin kirjoitetaan
commit-tietue (commit, T) ja loki kirjoitetaan sitten levylle.
Transaktion hallussa olevat lukot vapautetaan. 

Merkitys elvytyksessä: Jos T:lle ei löydy häiriön sattuessa lokista
commit-tietuetta (eikä abort-tietuetta), T on aktiivinen ja sen
toimenpiteet on peruttava (undo). Jos (commit,T) löytyy, mutta sen
jälkeen ei ole tehty tarkistuspistettä, T:n toimenpiteet on uusittava
(redo).

Arvostelu (Anna):
a) Checkpoint: max 4p (joko menettelyn kuvaus tai maininta operaation
hitaudesta on vaadittu täysiin pisteisiin)
- Tiedetään tilan tallettaminen ja merkitys elvyttämisessä mutta sekä
menettelyn kuvaus että menetelmän hitaus puuttuvat 3p
- Virheitä joko tilan tallettamisessa tai elvyttämisessä 2p
- Tilan tallettamisessa virheitä ja lisäksi elvytyskin puuttuu 1p

b) Sitoutumiskäytäntö: max 4p
- Muuten kunnossa mutta elvytysmaininta puuttuu 3p
- Mainittu operaatiot jotka tehdään sitoutumisen yhteydessä ilman
tarkempaa selitystä tai virheellisen selityksen kanssa 2p
- Commit lokiin, muuten selitys metsässä 1p