TIETOKANTOJEN PERUSTEET MARKKU SUNI
TIETOKANTOJEN SUUNNITTELU MARKKU SUNI
TARKASTELLAAN Tietokannan SUUNNITTELUN Vaihetta 5 SUUNNITTELE FYYSINEN ESITYSMUOTO
Tietokannan suunnittelun vaihe 5: Suunnittele fyysinen esitysmuoto Tavoite: Suunnitella optimaaliset tiedostojen organisointitavat perustaulujen ja indeksien osalta maksimaalisen suorituskyvyn saavuttamiseksi
5. Suunnittele fyysinen esitysmuoto Askeleet: 1. Analysoi tapahtumia 2. Valitse tiedosto-organisaatiot 3. Valitse indeksit
Vaihe 5: Suunnittele fyysinen esitysmuoto Mitä tehdään Tarkastellaan tiedosto-organisaatioita ja indeksejä. Järkevien päätösten tekemiseksi on tunnettava systeemi ja sen käyttäytyminen Tarkastellaan tapahtumia, arvioidaan niiden vaikutusta ja toimintaa usein suoritetuilla tapahtumilla suuri vaikutus suorituskykyyn liiketoiminnalle kriittisten tapahtumien kiireellisyys ja merkitys ajat, jolloin systeemissä on suuri kuormitus (huippuajat)
5.1 Analysoi tapahtumia (transaktioita) Tavoite: ymmärtää tietokantajärjestelmän tapahtumien toiminnallisuus ja analysoida tärkeät tapahtumat
5.1 Analysoi tapahtumia (transaktioita) Että tietokannan fyysinen suunnittelu onnistuisi hyvin, on ymmärrettävä suoritettavia tapahtumia Monessa tapauksessa olisi kohtuuttoman paljon työtä analysoida kaikki tapahtumat Voidaan tyytyä tärkeimpiin. On arvioitu, että noin 20% tapahtumista aiheuttaa 80% tiedonhausta myös koneajan käytöstä. tämä 80/20-sääntö pätee varsin usein
5.1 Analysoi tapahtumia (transaktioita) Mitä tapahtumia tarkastellaan? Mistä tietoa haetaan? Tapahtumakartta (kaavio) kuvaa mitkä taulut ovat käytössä tapahtumissa Tapahtumataulukko osoittaa samaa Millä alueilla voi olla ongelmia? Mitä tauluja tapahtumat käyttävät Mitä tauluja eniten käytetään tapahtumissa Analysoi joitakin näitä tauluja käyttäviä tapahtumia
5.1 Analysoi tapahtumia (transaktioita) (e) Enter details of a new member registered at a given branch uuden jäsenen tiedot toimistossa (k) Update/Delete the details of a given member jäsenen tietojen päivitys/poisto (p) List the title, category and availability of all videos at specified branch, ordered by category (q) List the title, category and availability of all videos for a given actor s name at specified branch, ordered by title ( r) List the title, category and availability of all videos for a given director s name at specified branch, ordered by title (s) List the details of all videos a spevified member currently has on rent
5.1 Analysoi tapahtumia (transaktioita) Arvioi tapahtumien tiheyttä Tiedossa oli, että StayHome tallettaa tietoja noin 20000 videofilmiä 400000 kasettia yli 100 toimistoa keskimäärin 4000 ja korkeintaan 10000 kasettia toimistossa 10000 ohjaajaa 30000 näyttelijää 60000 roolia
5.1 Analysoi tapahtumia (transaktioita) Taulu Video on ahkerassa käytössä Taulu VideoForRent on aika suuri Sen olisi syytä olla mahdollisimman tehokkaasti organisoitu Tarkastellaan siis näitä tauluja käsitteleviä tapahtumia
5.1 Analysoi tapahtumia (transaktioita) Tapahtumista on syytä tietää keskimääräinen ja maksimimäärä tunnissa minä päivänä ja mihin aikaan tapahtumaa käytetään milloin on huippuaika Esim.: yleensä tasaisesti keskiarvon mukaan, mutta torstaina 14:00 18:00 on huippuaika Onko tapahtumia, jotka suoritetaan vain tiettynä aikana? Onko samanaikaisia tapahtumia, jotka käyttävät paljon samoja tauluja?
5.1 Analysoi tapahtumia (transaktioita) Tietojen käyttöanalyysi kullekin tapahtumalle tapahtuman (miten?) käsittelemät taulut ja sarakkeet päivitettäville sarakkeille ehkä erillinen indeksi haun kohteena olevat sarakkeet hahmon (mallin, pattern) mukaan tapahtuva haku LIKE %Smith% aluehaku: salary BETWEEN 30000 AND 40000 tarkka haku: salary = 30000 kyselyssä liitoksiin osallistuvat sarakkeet odotettu tapahtuman esiintymistiheys (50 kertaa/pv) vaadittu suorituskyky (korkeintaan yksi sekunti)
5.1 Analysoi tapahtumia (transaktioita)
5.1 Analysoi tapahtumia (transaktioita) Tapahtuman analysoinnissa tarkastellaan haun kohteina olevia sarakkeita liitokseen osallistuvia sarakkeita järjestykseen vaikuttavia sarakkeita ryhmittelyyn osallistuvia sarakkeita valmiiden funktioiden käyttöä (AVG, SUM,... ) päivitettäviä sarakkeita HUOM.: päivittävä tapahtuma koskee tauluun kahdesti: lukua varten päivitystä varten
5.2 Valitse tiedosto-organisaatiot Tavoite: Valita tehokas tiedosto-organisaatio kullekin taululle
5.2 Valitse tiedosto-organisaatiot Tietokanta tai yksittäinen tiedosto toimii tehokkaimmin sopivasti organisoituna Jos lähes aina haetaan tietoa aakkosjärjestyksessä, on talletus paras tehdä siinä järjestyksessä Jotkut tiedosto-organisaatiot ovat tehokkaita ladattaessa paljon tietoa tietokantaan, mutta tehottomia muuten Voi olla, ettei käytetty järjestelmä anna valinnan varaa valita tehokas tiedosto-organisaatio kullekin taululle Joskus indeksitiedostoille voidaan valita organisaatio
5.2 Valitse tiedosto-organisaatiot Mahdollisia organisaatioita voisi olla heap hash Indexed Sequential Access Method (ISAM) B + -Tree jne...
5.2 Valitse tiedosto-organisaatiot Mahdollisia organisaatioita voisi olla: heap hyvä, kun dataa tuodaan tauluun massoina taulu on vain muutaman sivun mittainen koko taulu on läpikäytävä käsittelyn yhteydessä kun taululla on jokin muukin saantitapa heap huono, kun vain valittuja rivejä käsitellään
5.2 Valitse tiedosto-organisaatiot Mahdollisia organisaatioita voisi olla: hash hyvä, kun rivejä haetaan tarkalla avaimella varsinkin satunnaisesti hash huono, kun rivejä haetaan hahmon avulla hash-sarakkeen mukaan haetaan alueen avulla hash-sarakkeen mukaan rivejä haetaan muun kuin hash-sarakkeen perusteella rivejä haetaan osasarakkeen perusteella Hash-saraketta usein päivitetään
5.2 Valitse tiedosto-organisaatiot Mahdollisia organisaatioita voisi olla Indexed Sequential Access Method (ISAM) joustavampi rakenne kuin hash tukee hakuja tarkalla avaimella, hahmolla, alueella, osalla ISAM indeksi on staattinen, luodaan kerran suorituskyky heikkenee taulun päivitysten myötä päivitykset vaikuttavat tehokkuuteen
5.2 Valitse tiedosto-organisaatiot Mahdollisia organisaatioita voisi olla B + -Tree joustavampi kuin hash tukee hakuja tarkalla avaimella, hahmolla, alueella, osalla indeksi on dynaaminen, kasvaa taulun myötä suorituskyky ei laske päivitysten mukana säilyttää avainten järjestyksen jos taulua ei usein päivitetä, voi ISAM olla tehokkaampi (yksi indeksitaso vähemmän)
5.2 Valitse tiedosto-organisaatiot Dokumentoi valitut tiedosto-organisaatiot ja niiden perusteet
5.3 Valitse indeksit Tavoite Päättää, josko indeksien lisääminen parantaisi systeemin suorituskykyä
5.3 Valitse indeksit Mahdollisia ratkaisuja: Taulussa rivit järjestämättöminä ja niin monta toissijaisindeksiä (secondary indexes) kuin on tarpeen Taulu järjestettynä pääavaimen mukaiseen järjestykseen Taulu järjestettynä jonkin sarakkeen mukaisen järjestykseen sarake, jota useimmin käytetään liitoksissa (liitos tehostuu) sarake, jota useimmin käytetään rivien hakemiseen Jos sarake, jonka mukaan järjestetään, on avain, indeksi on primaarinen indeksi (primary index) Jos ei, kyseessä on klusteri-indeksi (clustering index) Yleensä voi olla vain toinen näistä kussakin taulussa
5.3 Valitse indeksit Miten luoda indeksi: Ensimmäisessä SQL-standardissa oli lauseet indeksien luontia varten Toisessa versiossa nämä jäivät pois Niiden katsottiin olevan fyysinen konsepti, eikä looginen Tulossa oleva standardi, SQL3 ei myöskään sisällä niitä Yleensä järjestelmät tukevat indeksinluontilauseita muodossa tai toisessa
5.3 Valitse indeksit Miten luoda indeksi: Tyypillisesti lauseen CREATE INDEX avulla CREATE UNIQUE INDEX catalogno_index ON video( catalogno ); Klusteroiva indeksi taululle VideoForRent: CREATE INDEX catalogno_index ON videoforrent ( catalogno) CLUSTER;
5.3 Valitse indeksit Miten luoda indeksi: Joissakin systeemeissä voidaan valita indeksin organisaatio lisäämällä lauseeseen optio: CREATE INDEX... STRUCTURE = BTREE ISAM HASH HEAP ; Indeksin hylkääminen tyypillisesti lauseella DROP INDEX catalogno_index;
5.3 Valitse indeksit Toissijaisten indeksien valinta (secondary indexes) Toissijaisten indeksien avulla voidaan perustaululle määritellä vaihtoehtoinen avain tiedon tehokasta hakua varten. Esim.: taulu Member indeksoidaan pääavaimen mukaan memberno Koska usein haetaan myös nimen perusteella, voisi olla järkevää rakentaa toissijainen indeksi nimen mukaan.
5.3 Valitse indeksit Toissijaisten indeksien valinta (secondary indexes) Toissijaisten indeksien tekemiseen, käyttöön ja ylläpitoon liittyy yleisrasitetta (overhead) indeksitiedoston rivin lisäys aina tauluun lisättäessä indeksitiedoston päivitys aina taulua päivitettäessä indeksitiedoston viemä levytila mahdollisesti kyselyjen hidastuminen: optimoija tarkastelee kaikkia toissijaisia indeksejä ennen optimaalisen kyselystrategian valintaa
5.3 Valitse indeksit Toissijaisten indeksien valinnasta Voidaan tehdä toivomuslista kaikista mahdollisista toissijaisista indekseistä ja sitten miettiä... 1. tee indeksi taulun pääavaimesta, ellei jo ole 2. älä indeksoi pieniä tauluja (jotka mahtuvat muistiin) 3. lisää toinen indeksi paljon hakuihin käytetylle sarakkeelle 4. lisää toinen indeksi paljon käytetylle vierasavaimelle 5. lisää toinen indeksi sarakkeille, joita usein käytetään liitoksiin (join) järjestämiseen (ORDER BY) ryhmittelyyn (GROUP BY) muihin lajitteluoperaatioihin (UNION, DISTINCT)
5.3 Valitse indeksit Toissijaisten indeksien valinnasta 6. lisää toinen indeksi sarakkeelle, jota käytetään funktioiden yhteydessä: SELECT branchno, AVG( salary) FROM staff GROUP BY branchno; voi olla ideaa tehdä indeksi salary:lle: index-only plan 7. lisää toinen indeksi sarakkeille, kun tuloksena voi olla index-only plan
5.3 Valitse indeksit Toissijaisten indeksien valinnasta 8. Vältä indeksiä usein päivitetylle sarakkeelle 9. Älä indeksoi saraketta, jos kyselyjen perusteella haetaan suuri osa taulusta ( esim. 25 %) taulun läpiluku (ns. tablespace scan) on tehokkaampi 10. Älä indeksoi sarakkeita, joilla on pitkiä merkkijonoja
5.3 Valitse indeksit Toissijaisten indeksien valinnasta - esimerkki Jos hakukriteereissä on useita ehtoja, joita yhdistää OR, ei indeksointi paljon auta. Jos taulun Video sarakkeet category ja dailyrental on indeksoitu, niin kysely SELECT * FROM video WHERE (category = Action OR dailyrental > 3 OR price > 15 ); ei toimi tehokkaasti: price-sarake on haettava läpiluvulla Mainituista indekseistä ei juuri olisi apua Jos OR-sanojen tilalla olisi AND, olisi indekseistä apua
5.3 Valitse indeksit Toivomuslistan karsiminen Kun toivomuslista on valmis, on aika miettiä kunkin indeksin vaikutusta päivityksiin Jos indeksin ylläpito todennäköisesti hidastaa tärkeitä päivitystapahtumia, harkitse indeksistä luopumista Toisaalta tietty indeksi voi tehdä päivityksistä tehokkaampia On hyvä idea kokeilla, milloin mahdollista: parantaako selvästi tehokkuutta parantaako vain hiukan tehokkuutta heikentääkö tehokkuutta
5.3 Valitse indeksit Toivomuslistan karsiminen Joissakin järjestelmissä on mahdollista tarkastella optimoijan toimintaa ja valintoja EXPLAIN-toiminto ORACLE: EXPLAIN PLAN Microsoft: Performance Analyzer DB2: EXPLAIN Utility Ingres: QEP-Viewing Facility Jos kysely vaikuttaa turhan hitaalta, tästä voi olla apua
5.3 Valitse indeksit Toivomuslistan karsiminen Jos tauluun viedään suuri määrä rivejä, voi olla järkevää pudottaa ensin indeksit suorittaa massapäivitys lisätä indeksit uudelleen Nyrkkisääntö: jos lisäys kasvattaa taulun rivimäärää yli 10%, on järkevää pudottaa indeksit sen ajaksi
5.3 Valitse indeksit Tietokannan statistiikan ylläpito Kyselyn optimoija luottaa tietokannan hakustatistiikkaan. Säilytetään systeemin katalogissa Lisättäessä indeksi järjestelmä vie siitä tiedon katalogiin Voi olla, että ylläpitäjän on suoritettava jokin ohjelma systeemin katalogin päivittämiseksi.
5 Esimerkki: ajatuksia StayHome videovuokraamon tauluista Tietokannan taulujen haluttu talletusrakenne Monien tietokantajärjestelmien tapaan MS Access käyttää tiettyä kiinnitettyä tiedostorakennetta eipä tarvitse vaivautua valitsemaan
5 Esimerkki: ajatuksia StayHome videovuokraamon tauluista Indeksien valinnasta MS Access tukee indeksejä. Taulun pääavain on automaattisesti indeksoitu Tietotyyppejä Memo, Hyperlink, OLE objekti ei voi indeksoida Muita sarakkeita voidaan indeksoida harkinnan mukaan
5 Esimerkki: ajatuksia StayHome videovuokraamon tauluista Indeksien valinnasta Microsoftin neuvo harkitse indeksointia, jos sarakkeen tietotyyppi on Text, Number, Currency, Date/Time odotat sarakkeen arvoja haettavan odotat lajitteluja tehtävän arvojen perusteella odotat monia erilaisia arvoja talletettavan sarakkeelle jos monet arvot ovat samoja, ei indeksistä ole apua
5 Esimerkki: ajatuksia StayHome videovuokraamon tauluista Indeksien valinnasta Microsoftin neuvo jatkoa harkitse liitosten molempien puolten indeksointia määritä suhde liitoskenttien välille Access luo automaagisesti indeksin vierasavaimelle ryhmiteltäessä rivejä liitoksessa mukana olleen kentän perusteella, kannattaa määritellä GROUP BY kentälle, joka on samassa taulussa kuin laskettava kenttä
5 Esimerkki: ajatuksia StayHome videovuokraamon tauluista MS Accessin piirteistä MS Access osaa optimoida yksinkertaisia ja monimutkaisia hakuehtoja (manuaalissa Expressions, lausekkeita) MS Access käyttää monimutkaisille kyselyille Rushmoretekniikkaa optimointiin Monimutkainen lauseke on yksinkertaisten yhdistelmä: branchno = B001 AND available = Yes category = Action OR dailyrental > 3
5 Esimerkki: ajatuksia StayHome videovuokraamon tauluista MS Accessin piirteistä MS Accessille kysely on kokonaan tai osittain optimoitava: ovatko yksinkertaiset lausekkeet optimoitavia millä operaatioilla ne yhdistetään Monimutkainen kysely on Rushmore-optimoitava, jos lauseke käyttää AND tai OR kahden ehdon liittämiseen molemmat ehdot koostuvat yksinkertaisista optimoitavista lausekkeista molemmat ehdot sisältävät indeksoituja kenttiä yksinkertainen indeksi tai osa yhdistettyä indeksiä
5 Esimerkki: ajatuksia StayHome videovuokraamon tauluista Indeksin määrittely MS Accessille Aseta suunnittelunäkymässä (Design View) kentälle ominaisuus indeksoitu (indexed) Ominaisuudella indeksoitu on arvot: No ei indeksiä (oletus) Yes (Duplicates OK) indeksi sallii kahdennukset Yes (No Duplicates) indeksin oltava yksikäsitteinen
5 Esimerkki: ajatuksia StayHome videovuokraamon tauluista Indeksit videovuokraamon tauluille Määrittele joka taululle pääavain Access tekee indeksin Määrittele suhteet oikein suhdenäkymässä (Relationships) Access indeksoi vierasavaimet Tarkastelemalla tapahtumia arvioi muiden indeksien tarvetta
5 StayHome videovuokraamon tauluista Taulu sarake tapahtuma peruste Branch city (m) hakuehto Staff name (n) järjestys Video category (p) järjestys (u) hakuehto (v) ryhmittely title (q,r,u) järjestys Actor actorname (q) hakuehto (x) ryhmittely, järjestys Director directorname ( r) hakuehto Member fname/lname (s) hakuehto RentalAgreement datereturn (s) hakuehto Registration datejoined (y) hakuehto
It s a sad day in Paris With no girl by my side Got to feeling so badly Like a part of me died It would have been So good to see her I never thought She wouldn't be there There's no girl standing there And there's no one who cares And the trees are so bare On the Boulevard de la Madeleine The Moody Blues