Tietokannan hallinta

Välikokeen 01.11.2000 ratkaisut ja arvostelu

Korjaajat: 1&2: Janne Rinta-Mänty, 3: Janne Kraft, 4&5: Anna Pienimäki


1.  Olkoon levytiedostossa 200 000 tietuetta, tietueen pituus 200 tavua
ja jakson pituus 4096 tavua.  Levyn kohdistusaika (seek time) on 1-12 ms
ja jakson siirtoaika (block transfer time) 0.5 ms.  Levykössä on 10
levypintaa, pinnalla 2000 uraa ja uralla 40 jaksoa.  Mikä on lyhin ja
pisin aika, minkä tiedoston kaikkien jaksojen lukeminen voi viedä?
(Esitä oletukset, joilla päästään minimiaikaan ja maksimiaikaan, ja
arvioi lukemiseen tarvittava aika.) 6 p

Ratkaisu: 

Tietueet vievät tilaa 200 000 x 200 tavua eli 40 MB.  Jaksoon
mahtuu 20 tietuetta (jää 96 tavua kontrollitiedoille) eli jaksojen määrä
on 10 000. 

Minimiaika: Jaksot ovat peräkkäin sylintereittäin ja urat täynnä. 
Hakuvarren siirtoja tarvitaan tällöin vain koko sylinterin jaksojen
lukemisen jälkeen ja siirto on mahdollisimamn lyhyt (seuraavalle
sylinterille). 

Maksimiaika: Jaksot ovat "yksitellen" hajallaan, jolloin jokaisen jakson
lukeminen vaatii hakuvarren siirron, pyörähdysviipeen ja jakson
siirtoajan. 

Sylinterille mahtuu 10 x 40 = 400 jaksoa; sylintereitä tarvitaan siis
25.

Lasketaan keskimääräinen pyörähdysviive: Yhden pyörähdyksen aikana siirretään
40 jaksoa eli se kestää 40 x 0.5 = 20 ms. Keskimääräinen pyörähdysviive
on siis 10 ms. Käytetään tätä laskuissa. (Maksimaalinen lähes täysi
pyörähdys veisi 39/40 x 20 = 19.5 ms, minimaalinen viive on 0, mutta sen
toteutuminen muuten kuin samaa uraa luettaessa on sattumanvaraista.)

Minimiaika: 1. sylinterin siirto: 1 + 10 + 400 x 0.5 = 211 ms
	muut sylinterit: 24 x (1 + 0 + 400 x 0.5) = 4824 ms
	eli yhteensä 5.04 ms

Maksimiaika: 10000 x (12 + 10 + 0.5) = 225 000 ms = 225 s

(Kohdistusaika on käytännössä hieman pienempi, koska peräkkäin luettavat
jaksot eivät voi olla aivan reunimmaisilla urilla. Mutta 25 sylinterin
'pahin mahdollinen sijoitus' voisi olla esim. 13 sisimmällä ja 12
uloimmalla uralla, jolloin kohdistukset ovat hyvin lähellä maksimia.)

Arvostelu: Minimiaika oletuksineen 3 pistettä, maksimiaika oletuksineen
3 pistettä.  Laskuvirheistä ei sakotettu (jako- ja kertolasku näytti
olleen yllättävän vaikeaa!).  Maksimiajassa hyväksyttiin sekä
maksimi- että keskimääräisen kohdistusajan tai pyörähdysviipeen
käyttö.  

-----

2.  Olkoon relaatiossa 500 000 tietuetta (monikkoa), tietueen pituus 400
tavua ja jakson pituus 4096 tavua.  Jakson osoite ja tietueen avain
vievät kumpikin 10 tavua.  Jakson saantiaika on 0.2 s. 
Keskusmuistitilaa on käytettävissä vain 20 kilotavua. 

Relaatiota käyttävässä sovelluksessa halutaan saada monikon haku
suoritetuksi 1 sekunnissa.  Relaatio on toteutettu a) hajautukseen
perustuvana tiedostorakenteena tai b) harvana ISAM-rakenteena.  Relaatio
on luotu yleisten periaatteiden mukaan 200 000 tietueen kokoisena ja
kasvanut lisäysoperaatioilla vähitellen esitettyyn kokoon. 

Selitä kummankin tiedostorakenteen pääpiirteet tehtävässä mainittuihin
kokotietoihin perustuen (kaavio ja riittävästi selitystä).  Hajautuksen
tapauksessa ei ole tarkoitus käsitellä dynaamisia hajautusmenetelmiä,
vaan perusmenetelmää. 

Millä edellytyksillä monikon haku toteutuu halutussa ajassa? 12 p

Ratkaisu - hieman pitkät selitykset ilman kaaviota (ks.  luennot: s. 
2-28); näin pitkää ei tietysti vaadittu, kunhan rakenteiden mittasuhteet
oli itselle selvitetty):

a) Hajautusalue = B kpl kotisolujen osoitteita (0..B-1). Kotisolussa on
yksi tai useampia jaksoja ketjussa. Jaksoon mahtuu 10 tietuetta, joten
500 000 tietuetta vaatii 50000 täyttä jaksoa. Käytännössä hajautus ei
ole tasainen, joten jaksoja tarvitaan enemmän.

Yhden sekunnin vaatimus sallii enintään 5 jakson ketjut. Tällöin
kotisolujen jakso-osoitteiden tulisi mahtua keskusmuistiin.
Jakso-osoitteita on vähintään 50000 / 5 = 10000 kpl eli niiden vaatima
tila on vähintään 10 x 10000 tavua eli 100 KB. Keksumuistirajoituksen
takia kotisolujen jakso-osoitteet tulee pitää levymuistissa, ja ketjut
on lyhennettävä enintään 4 jakson pituisiksi, jolloin niitä olisi 12500
kpl. Tällöin jakso-osoitteet (125 000 tavua) olisivat 32 jaksossa;
näiden osoitteet keskusmuistissa.

Käytännössä hajautus ei ole läheskään optimaalisen tasainen eli
tarvitaan enemmän ketjuja eli suurempi hajautusalue. Voidaan kuitenkin
olettaa, että edellä kuvatut periaatteet riittävät. 

Esim. B = 40000: keskusmuistissa 100 osoitetta jaksoihin, joissa
kussakin on 400 jakso-osoitetta; tasaisella hajautuksella ketjussa on
keskimäärin 12.5 tietuetta eli 1.25 jaksoa. Alussa (200 000 tietuetta)
ketjut voivat olla yhden jakson pituisia (2 levyhakua).

Ts. edellytyksenä yhden sekunnin riittämiselle on
- riittävän suuri hajautusalueen koko (takaa keskimäärin nopean
toiminnan), ja
- riittävän tasainen hajautus: mikään ketju ei saisi olla pitempi kuin 4
jaksoa.

b) ISAM: levyhakujen määrä muodostuu hakemistotasoista ja perusjaksoista
(ylivuotoketjuineen). Luontivaiheen rakenne: 2 hakemistotasoa, vrt.
'kaavio' luentojen sivulla 3-10).

Perustaso: 200 000 tietuetta, jaksojen 50 %:n täyttöasteella 40000 jaksoa.

1. hakemistotaso: 40000 hakemistotietuetta, jokainen 10 + 10 tavua eli
200 jaksoa.

2. hakemistotaso: 200 hakemistotietuetta eli mahtuvat yhteen jaksoon
(keskusmuistiin). 

Luontivaiheen jälkeen kaikki monikon haut toteutuvat kahdella
levyhaulla.

Relaation laajentuminen 500 000 tietueeseen: 200 000 uutta tietuetta
mahtuisi ilman ylivuotojaksoja, jos jakauma olisi hyvin tasainen
(teoriaa!).  Lisättäessä vielä 100 000 tietuetta keskimääräinen
ylivuotoketjun pituus jää edelleen pieneksi (jos tietueet jakautuvat
tasaisesti). 

Ts. tässä tapauksessa yhden sekunnin rajan edellytyksenä on, että mikään
ylivuotoketju ei tule pitemmäksi kuin 4 jaksoa (perusjakso mukaanluettuna).

Arvostelu: Hajautuksen ja harvan ISAMin perusteiden selittäminen 3
pistettä/kpl, niiden soveltaminen tehtävän tapaukseen 3 pistettä/kpl. 
Tässäkään ei sakotettu laskuvirheistä. 

----                              

3. Olkoon tietokannassa relaatiot
        henkilö(hetu, snimi, enimi, palkka, osnro),
        osasto(onro, onimi, opaikka, johtaja).

a) Selitä valintaoperaation toteutusvaihtoehdot esimerkkikyselyn
        select snimi, enimi from henkilö
        where palkka < 10000 and osnro = 5;
    kannalta. Esitä sopivat oletukset henkilö-relaation vaihtoehtoisille
    toteutuksille ja selitä kyselyn toteutus oletuksiin perustuen.

b) Esitä optimoitu kyselypuu (kaavapuu) kyselylle
        select snimi, enimi, onimi from henkilö, osasto
        where osnro = onro and palkka > 20000 and opaikka = Helsinki;

c) Selitä lyhyesti, mitä vaihtoehtoisia tapoja on b-kohdan kyselyn
liitosoperaation toteuttamiselle? Vastauksesta tulee käydä ilmi, mitä
vaatimuksia eri tavat asettavat relaatioiden toteutukselle.  12 p   

Ratkaisu:

a) Ks. luennot, s. 4-11..4-12

Jos relaatiolle ei ole hakemistoja, luetaan kaikki sivut läpi ja
testataan ehdot jokaiselle tietueelle (lineaarinen haku).

Jos relaatio on järjestetty osnro:n mukaan, voidaan hakea binäärihaulla
(osnro=5)- monikot ja testata jokaiselle palkka-ehto. (Vastaavasti
toisinpäin, jos on palkkajärjestys; epätodennäköinen).

Jos relaatiolle on osnro- tai salary-hakemisto tai molemmat, käytetään
ainoaa tai valitsevampaa hakemistoa eli varmaankin osnro-hakemistoa ja
testataan palkkaehto valituille tietueille. Palkka-hakemiston käyttö on
mahdollista vain, jos hakemisto on järjestävä. 

Jos on kaksi hakemistoa, voidaan muodostaa niiden antamien
tietueosoitinlistojen leikkaus ja hakea vain leikkaukseen kuuluvat
tietueet.

b)                   P
		      snimi, enimi, onimi
			      |
                              |
			     |><|
                              /\ osnro = onro
			     /  \
			    /    \
			   /      \
		S                 S  
		 palkka > 20000    opaikka = 'Helsinki'
			|	    |
			|	    |
			|	    |
		   henkilö	  osasto


(P = projektio, S = valinta)

c) - sisäkkäiset silmukat
	käytetään, kun ei ole hakemistoja; pienempi relaatio ulompaan
	silmukkaan (tässä riippuu ainakin palkkatasosta)

   - lomitus
	käytetään, kun relaatiot järjestyksessä
	tässä osasto voisi ehkä olla järjestyksessä, mahdollisesti
	henkilötkin

   - hakemistoliitos
	tarvitaan osastonumero-hakemisto ainakin toiselle relaatiolle

   - hajautusliitos
	hajautetaan pienemmän relaation rivit ensin ja käydään
	  läpi toinen relaatio (hajauttaen) 
	tässä kokojen suhde riippuu palkkatasosta ja osastojen määrästä 
	  Helsingissä 

Arvostelu: a) 4 p, b) 4 p, c) 4 p (a&c: relaatioiden tai hakemistojen
valintaan liittyvää pohdiskelua ei laajasti vaadittu;
perustelemattomalla asialuettelolla ei toisaalta saanut kuin yhden pisteen) 

---

4.  a) Selitä elvytykseen käytettävän lokin tietuetyypit ja niiden
käyttö elvytyksessä.

b) Tietosivulla (esim.  tunnustietueessa) ylläpidetään erästä
lokitietueen järjestysnumeroa (log sequence number, LSN).  Mikä on sen
merkitys elvytyksessä?

c) Mitä tarkoitetaan WAL (write ahead logging) - käytännöllä?  10 p
                                                                
Ratkaisu:

a) Ks. luennot, s. 5-19 (tietuetyypit), 5-23 (käyttö).
b) Ks. luennot, s. 5-25.
c) Ks. luennot, s. 5-21.

Arvostelu:

a) Tietuetyypit, käyttö (4p)

Tietuetyypit:

Start, Write, Abort, Commit, Checkpoint - 2p
Start puuttuu - ei miinuksia
Muista puutteista -1/2p per puuttuva

Kaikkien käyttö selitetty 2p
-1/2p per puuttuva selitys elytystilanteesta

b) LSN (3p)

Kerrottu lokin rivinumerointi, levyllä olevien tietoalkioiden PageLSN:t
ja elvytystilanteen toiminta - 3p

Elvytys puuttui max. 1 1/2 p
Mainittu vain järjestysnumerointi, elvytyksessä puhuttu järjestyksestä
max. 1 1/2 p

c) WAL (3p)

Lokin kirjoitus levylle aina ennen datasivujen kirjoitusta - 3p
Jos puhuttu pelkästä lokiin kirjoittamisesta (muttei lokin
levylleviennistä) max. 1 1/2 pistettä.  

---

5. Oletetaan, että transaktiot T1 ja T2 noudattavat seuraavaa ajoitusta:

        1       T1: read_item(X);
        2               T2: read_item(X);
        3       T1: write_item(X);
        4       T1: read_item(Y);
        5               T2: read_item(X);
        6               T2: write_item(X);
        7       T1: write-item(Y);
        8       T1: commit;
        9               T2: commit;

a) Mitkä operaatioparit tässä ajoituksessa konfliktoivat? Vastaa
numeropareilla: esim.  1-2, jos rivien 1 ja 2 operaatiot konfliktoivat. 
Anna kolme esimerkkiä ei-konfliktoivasta operaatioparista ja perustele,
miksi kukin niistä ei konfliktoi.  Esimerkkien tulee olla erilaisia
(kussakin eri peruste). 

b) Mitä eristyvyysanomalioita konflikteihin liittyy?         10 p

Ratkaisu & arvostelu:

a) Konfliktoivat (2p), Ei-konfliktoivat (2p)

Konfliktoivat:  1-6, 2-3, 3-5, 3-6:  2p

- 1/2 p per puuttuva

Ei-konfliktoivat (esim.):

	1-3	saman transaktion operaatioita
	6-7	eri tietoalkioon kohdistuvia
	1-2	molemmat lukuoperaatioita

Kolme eri perustein ei-konfliktoivaa paria perusteltuna 2p
Tässä hyväksytty myös lokimuotoiset esittelyt ei-konfliktoivista
pareista.

- Ei perusteltu - max 1p

b) Anomaliat:

1-6 	toistokelvoton luku (samoin 2-3)
3-5 	likainen luku
3-6	likainen kirjoitus

Kaikki kolme anomaliaa esitelty 6p
-2p per puuttuva