330 likes | 560 Views
3.3. Fyysisen tietokannan suunnittelu. Fyysisen tason suunnitteluun liittyviä kysymyksiä: Muistilaitteet Tiedosto-organisaatiot Hakemistorakenteet Suunnittelutekniikat. Muistityypeistä.
E N D
3.3. Fyysisen tietokannan suunnittelu Fyysisen tason suunnitteluun liittyviä kysymyksiä: • Muistilaitteet • Tiedosto-organisaatiot • Hakemistorakenteet • Suunnittelutekniikat 4-3-FyysSuunn Teuhola 2012
Muistityypeistä • Tietokoneen muistilaitteiden päätyypit:keskusmuisti(primary storage) ja oheismuisti (secondary & tertiary storage). • Muistihierarkia nopeimmasta hitaimpaan: • Välimuisti (cache, useita tasoja: L1, L2, L3) • Päämuisti (main memory) • Flash-muisti (SSD, solid state drive) • Magneettinen levymuisti (HDD, hard disk drive) • Optinen levymuisti • Magneettinen nauhamuisti 4-3-FyysSuunn Teuhola 2012
Muistityypeistä (jatk.) • Muistit jaetaan edelleen: • Pysyvät (nonvolatile) vs. ‘haihtuvat’ muistit (volatile) • Online- vs. offline-muistit • Tietokannat talletetaan tyypillisesti pysyvään, online-tyyppiseen oheismuistiin. • Muistihierarkian käsittely edellyttää puskurointia eli siirtoa tasolta toiselle isommissa paloissa. 4-3-FyysSuunn Teuhola 2012
Magneettiset levymuistit • Yleisin tietokantojen tallennusväline (toistaiseksi) • Mekaaninen laite: • 1 tai useampia levypintoja (‘levypakka’), jossa tyypillisesti tuhansia uria/pinta. Päällekkäiset urat muodostavat sylinterin. • Liikkuva hakuvarsi, jossa luku-/kirjoituspää;tyypillinen hakuaika (seek) noin 3-10 ms. • Pyörimisnopeus n. 5000-15000 kierrosta/min;pyörähdysviive eli latenssi vastaavasti keskim. 2-6 ms. • Teoreettinen siirtonopeus satoja MB/sek; formatoidulle tiedolle käytännössä noin 50-100 MB/sek. 4-3-FyysSuunn Teuhola 2012
Levymuistin tallennusyksiköt • Perusyksikkö on sektori, yleensä 512 tavua. • Toisaalta levymuisti jakautuu blokkeihin (‘lohko’, ‘jakso’, ‘sivu’), joiden koko kiinnitetään alustuksessa; yleensä 512 - 8192 tavua. • Blokki on siirtoyksikkö oheismuistin ja keskus-muistin välillä. Joissain järjestelmissä useamman lohkon ryväs eli klusterivoidaan siirtää yhtä-jaksoisesti. Blokki on tärkeä yksikkö oheismuistin tietorakenteissa. 4-3-FyysSuunn Teuhola 2012
Puskurointi • Puskuri on keskusmuistin alue, johon levydataa siirretään käsittelyä varten ja josta se kirjoitetaan takaisin päivityksen jälkeen. • Ideana rinnakkaisuus: Puskuria voidaan täyttää/ tyhjentää samalla kun prosessori tekee jotain muuta. Tarvitaan erillinen levyohjain (kontrolleri). • Kaksoispuskurointi: Prosessori käsittelee puskurin A sisältöä ja samanaikaisesti dataa siirretään puskurista/puskuriin B. 4-3-FyysSuunn Teuhola 2012
RAID-levyjärjestelmät • Engl. Redundant Array of Independent Disks • Usean fyysisen levyn muodostama järjestelmä • Rinnakkainen siirto moninkertaistaa nopeuden. • Datan sijoittelussa voidaan soveltaa viipalointia (striping) joko blokkitasolla (yhteenkuuluvat blokit eri levyillä) tai bittitasolla (saman tavun eri bitit eri levyillä). • Redundantti data (esim. ylimääräinen pariteettilevy tai hajautettu pariteettidata) mahdollistaa virheenkorjauksen ja toiminnan jatkumisen, vaikka yksi levy rikkoutuu. 4-3-FyysSuunn Teuhola 2012
Tiedostot ja tietueet • Tietue on looginen (ja usein myös fyysisesti yhtenäinen) tietoalkioiden kokoelma. • Tietoalkiot voivat olla kiinteän tai vaihtelevan mittaisia; erikoistapauksena pitkät tietoalkiot (BLOB = Binary Large OBject), jotka talletetaan yleensä erillisinä. • Relaatiotietokannoissa relaation rivi muodostaa yleensä tietueen. • Tiedosto on samantyyppisten tietueiden kokoelma, esim. relaatio. 4-3-FyysSuunn Teuhola 2012
Tiedoston tietueiden sijoittelu • Peräkkäiskäsittelyn kannalta tietueiden fyysinen vierekkäisyys (samalla uralla/sylinterillä) on edullista. • Päivitysten kannalta hajasijoittaminen on joustavampaa. Tällöin tietueet (blokit) linkitetään osoittimilla loogisesti peräkkäin. • Välimuoto: Peräkkäisten blokkien ryvästys ns. klustereiksi (eli segmenteiksi), jotka ovat varausyksikköjä. Tiedostoon kuuluvat klusterit linkitetään osoittimilla peräkkäin. 4-3-FyysSuunn Teuhola 2012
Tiedosto-organisaatioista:Järjestämättömät tietueet • Engl. heap tai pile • Nopea lisäys: tiedoston loppuun. • Tietueen haku hidasta (peräkkäin) ellei ole apuhakemistoa. • Poisto synnyttää aukon; hoidetaan yleensä merkkaamalla poistot ja suorittamalla silloin tällöin tiedoston uudelleenorganisointi. 4-3-FyysSuunn Teuhola 2012
Tiedosto-organisaatioista:Järjestetyt tietueet • Tietueet voidaan tallettaa jonkin avaimen (esim. relaation pääavaimen) arvojen mukaan nousevaan/ laskevaan järjestykseen. • Haku järjestysavainta käyttäen on selvästi peräkkäis-hakua nopeampaa (puolitushaulla). • Lisäys hankalaa: pitää tehdä oikeaan väliin. • Huom! Järjestettyjä tiedostoja ei tietokannoissa käytetä juuri koskaan ilman ns. primäärihakemistoa, joka tehostaa hakuja entisestään ja mahdollistaa joustavat lisäykset ja poistot. 4-3-FyysSuunn Teuhola 2012
Tiedosto-organisaatioista:Hajautus eli hashing • Tietueen avainarvosta lasketaan jollain hajauttavalla funktiolla sen lohkon (bucket; block) järjestysnumero, johon tietue sijoitetaan. • Edut: Nopea haku, lisäys ja poisto. • Ongelmia: tehoton tilankäyttö (lohkoihin jää tyhjää), toisaalta lohkojen ylivuoto (overflow; hoidetaan ylivuotolohkoilla, joihin linkitys). • Perusmuodossa tilanvaraus on staattinen; dynaamisia hash-organisaatioita on myös olemassa. 4-3-FyysSuunn Teuhola 2012
Hakemistorakenteista • Hakemistot (indeksit) ovat keskeisessä asemassa tietokannan fyysisessä optimoinnissa. • Hakemisto perustuu tiedoston (relaation) jonkin kentän (attribuutin) arvoihin, joiden suhteen hakemisto on yleensä järjestetty. • Hakemisto nopeuttaa ko. kentän perusteella tapahtuvaa hakua, mutta hidastaa päivityksiä. Turhia hakemistoja ei pidä luoda. 4-3-FyysSuunn Teuhola 2012
Hakemistot ja SQL • SQL-standardi ei määrittele hakemistojen luontia tai poistoa, mutta useimmat tietokantajärjestelmät (kuten PostgreSQL) tukevat CREATE INDEX ja DROP INDEX –komentoja (ovat osa skeemanmäärittelykieltä). • Hakemistoja voidaan luoda ja poistaa myös dynaamisesti tietokannan luonnin jälkeen. 4-3-FyysSuunn Teuhola 2012
Hakemistojen päätyypit:1) Primäärihakemisto • Avain-osoitin-pareista muodostuva tiedosto, joka on avainarvojen mukaan järjestetty, kuten varsinainen tiedostokin. • Avainarvojen on oltava yksikäsitteisiä(vrt. relaation pääavain.) • Primäärihakemisto on yleensä harva (sparse; non-dense) eli sisältää vain tiedoston kunkin blokin ensimmäisen/viimeisen avaimen ja osoittimen ko. blokkiin. 4-3-FyysSuunn Teuhola 2012
PostgreSQL ja primäärihakemistot • Taulun luonnin yhteydessä määriteltävä PRIMARY KEY saa aikaan automaattisesti primäärihakemiston luonnin pääavain-sarakkeelle/-sarakkeille. • Muille avaimille (skeemassa määre UNIQUE) luodaan myös automaattisesti hakemisto,jonka avulla järjestelmä valvoo arvojen yksikäsitteisyyttä. 4-3-FyysSuunn Teuhola 2012
Hakemistojen päätyypit:2) Ryvästävä hakemisto • Engl. ‘clustering index’ • Itse tiedosto on järjestetty ryvästävän avaimen arvojen mukaan, eli saman arvon omaavat tietueet peräkkäin. • Avainarvot eivät ole välttämättä yksikäsitteisiä. • Hakemisto sisältää kunkin erillisen avainarvon ja osoittimen sen ensimmäiseen esiintymään tiedostossa (loput esiintymät peräkkäin sen jälkeen). • Tämäkin on ‘harva’ hakemisto (duplikaateilla vain yksi edustaja hakemistossa). 4-3-FyysSuunn Teuhola 2012
PostgreSQL: Ryvästys hakemiston perusteella • PostgreSQL järjestää relaation rivit annetun hakemiston mukaiseen järjestykseen, jos määritelläänCLUSTERrelnimiUSING hakemistonimi; • Hakemisto pitää luoda ensin; relaation automaattisen pääavainhakemiston nimi on relaationimi_pkey. • Ryvästystä ei ylläpidetä dynaamisesti, vaan käsky pitää tarvittaessa toistaa. • Lisäksi kannattaa antaa ANALYZE-komento, jotta optimoija noteeraa ryvästyksen antamat mahdollisuudet. 4-3-FyysSuunn Teuhola 2012
Hakemistojen päätyypit:3) Toisio- eli sekundäärihakemisto • Hakemistoavaimen arvojen ei tarvitse olla erisuuria eri tietueissa. • Hakemisto on avainarvojen mukaan järjestetty, mutta tiedosto ei. • Sekundäärihakemisto on tiheä, eli jokaisella tiedoston avainesiintymällä on jonkilainen vastine hakemistossa. Toteutusvaihtoehdot: • (avainarvo, osoitin) –pari jokaiselle arvoesiintymälle • (avainarvo, osoitinlista) jokaiselle erisuurelle arvolle. 4-3-FyysSuunn Teuhola 2012
PostgreSQL ja toisiohakemistot • Eksplisiittinen luonti, esim.CREATE INDEXnimihakONasiakas(animi); • Myös useamman sarakkeen yhteinen hakemisto:CREATE INDEXosoitehakONasiakas(katu, katunro); • Hakemiston poisto:DROP INDEXnimihak; 4-3-FyysSuunn Teuhola 2012
Monitasohakemistot • Hakemistot ovat avaimen mukaan järjestettyjä tiedostoja, joten niille voi rakentaa ylemmän tason (harvan) hakemiston, joka on oleellisesti pienempi. • Tätä voidaan toistaa, kunnes päädytään riittävän pieneen (esim. yhden levyblokin kokoiseen) hakemistotasoon. • Syntyy puurakenne, jonka solmut ovat levyblokkeja ja tasot avainarvojen mukaan järjestyksessä; ylemmät tasot ‘harvempia’. 4-3-FyysSuunn Teuhola 2012
B-puuhakemisto • Dynaaminen monitasohakemisto • Yleisin versio ns. B+-puu, jolla on seuraavia rakenteellisia ominaisuuksia: • Tasapainoinen (kaikki lehdet samalla tasolla) • Leveä (suuri haarautumisaste) • Puussa yleensä vain 2-4 tasoa; solmut levyblokkeja. • Solmuissa pelivaraa: täyttösuhde 50-100% • Solmuissa avaimia ja osoittimia lapsiin 4-3-FyysSuunn Teuhola 2012
B-puuhakemiston toiminnasta • Tehokas haku: Yksi polku juuresta lehteen, haarautuminen avainarvojen perusteella;2-4 levysaantia (vrt. puun korkeus) • Tehokas peräkkäiskäsittely: lehtisolmut linkitetty järjestykseen. • Lisäysten yhteydessä mahdollisesti ylivuoto ja solmun jako kahdeksi uudeksi. Jakotarve voi siirtyä isäsolmuun jopa puun korkeuden kasvu. • Poistojen yhteydessä mahdollisesti alivuoto ja solmujen yhdistäminen; jopa puun korkeuden lasku. 4-3-FyysSuunn Teuhola 2012
29 77 … 7 19 50 54 … 51 54 3 7 12 14 19 24 29 37 44 50 Dataosoittimet tietueisiin/blokkeihin Esimerkki B+-puusta 4-3-FyysSuunn Teuhola 2012
PostgreSQL:n tarjoamat hakemistorakenteet • B-puu oletuksena • Käyttö sekä yhtäsuuruus- että suuremmuus-/pienemmyys-kyselyehdoissa • Hash-hakemisto • Hyödyllinen vain yhtäsuuruusehdoille • Luonti:CREATE INDEXhakON asiakas USING hash (animi); • Lisäksi erikoishakemistoja 4-3-FyysSuunn Teuhola 2012
Havaintoja PostgreSQL:n hakemistoista • Valinta yhtäsuuruusehdolla nopeutuu jopa yli 95% kun ehtoon liittyvälle attribuutille luodaan hakemisto. • Jos liitoskyselyssä on myös valintaehtoja, saadaan lähes vastaavansuuruinen nopeutus. • Sen sijaan relaatioiden täydellinen liitos pää- ja viiteavainten suhteen ei hyödynnä hakemistoja. • Pääavainten perusteella tapahtuva liitos käyttää primäärihakemistoja, ja nopeutuu, jos relaatiot ryvästetään (CLUSTER) pääavainten mukaan. 4-3-FyysSuunn Teuhola 2012
Fyysisen tason tietokantasuunnittelusta • Perustana tietokantaan kohdistuvat käsittely-operaatiot (kyselyt, päivitykset) • Optimointitehtävä: Minimoitava operaatioiden yhteissuoritusaika (painotettuna niiden esiintymistiheyksillä) • Lisäksi joillakin operaatioilla voi olla rajoitettu maksimisuoritusaika. • Kyseessä on vaikea kombinatorinenoptimointi-tehtävä; sille ei useinkaan löydetä tarkkaa (globaalista) optimia. 4-3-FyysSuunn Teuhola 2012
Fyysisen suunnittelun lähestymistapoja • Analyyttinensuunnittelu:Muodostetaan malli ja kustannusfunktio jokaiselle vaihtoehtoiselle talletusrakenteelle, ja suoritetaan likimääräinen optimointi. • Kokeellinensuunnittelu:Kokeillaan erilaisia fyysisen tason ratkaisuja, käyttäen olemassaolevaa tietokannan hallinta-järjestelmää. Monet kyselynoptimoijat antavat SQL-lauseille kestoarvion, vaikkei varsinaista dataa vielä olisi käytettävissäkään.Esim. PostgreSQL: EXPLAIN <SQL-lause>; 4-3-FyysSuunn Teuhola 2012
Fyysisen tason suunnittelupäätöksiä • Tiedosto-organisaation valinta (järjestämätön, järjestetty, hash) & mahdollinen järjestysavain/ hash-avain • Hakemistovalinta (primääri-/sekundääri-hakemistot; hakemisto-organisaatio) • Levyblokin koko (jos voidaan valita) • Sijoittelu eri levy-yksiköille; datan mahdollinen viipalointi RAID-levyille 4-3-FyysSuunn Teuhola 2012
Relaatiotietokannan tehostuskeinoja • Horisontaalinen partitiointi: Erotetaan relaation usein käsiteltävät monikot omaan tiedostoonsa. • Vertikaalinen partitiointi: Erotetaan relaation usein käsiteltävät lyhyet attribuutit omaan tiedostoonsa. • Replikointi eli moninkertainen talletus, esim. tukemaan eri käsittelyjärjestyksiä. • Denormalisointi eli luopuminen korkeammista normaalimuodoista liitosten välttämiseksi; suositeltavaa vain staattisten tietojen yhteydessä 4-3-FyysSuunn Teuhola 2012
Esimerkki horisontaalisesta partitioinnista Esimiehet (käsitellään usein): Muut työntekijät (käsitellään harvemmin): 4-3-FyysSuunn Teuhola 2012
Avain & lyhyet attribuutit Avain & pitkät attribuutit Esimerkki vertikaalisesta partitioinnista 4-3-FyysSuunn Teuhola 2012
Esimerkki denormalisoinnista • Normalisoitu: • Denormalisoitu: FD, staattinen 3NF 4-3-FyysSuunn Teuhola 2012