HELIA 1 (15) Luento Suorituskyvyn optimointi... 2 Tiedonhallintajärjestelmän rakenne... 3 Suunnittele... 4 SQL-komentojen viritys... 5 Tekninen ympäristö... 6 Fyysisen tason ratkaisut... 7 Indeksit... 8 Tietojen tilankäyttöratkaisut... 12 Tietokantaobjektien kokomäärittely... 13 Tietokantaobjektien sijoittelu... 14 Kokeile ja testaa... 15
HELIA 2 (15) Suorituskyvyn optimointi 1. SQL-lauseiden (yleensä kyselyjen) virittäminen 2. Fyysisen tason suunnittelu / talletusratkaisut Ä Indeksit Ä Levytilan käyttö 3. Tietokannan parametrit Ä puskurit Ä Fyysisen tason ratkaisut vaikuttavat kyselyjen virittämiseen Suorituskyvyn mittareita Vasteaika (response time) Yksittäisten operaatioiden suorittamiseen kuluva aika mittausyksikkö sekunti 1. CPU 2. Levy I/O 3. Lukko-odotus Suoritusteho (troughput) Operaatioiden lukumäärä aikayksikköä kohti mittausyksikkö: tapahtumaa / sekunti Levytilan käyttö Levyjen hintojen laskun myötä ei enää kriittinen tekijä
HELIA 3 (15) Tiedonhallintajärjestelmän rakenne SQL- liittymä Sovellusohjelma SQL- komentoja SQL- käsittelijä (SQL Processor) Tapahtuman käsittelijä (Transaction Manager) Tilan käsittelijä (Storage Manager) DATA & METADATA
HELIA 4 (15) Suunnittele Ä Sovelluksen kriittinen tieto Iso tapahtumatiheys Iso volyymi = rivimäärä Iso volyymin muutos = nopea kasvu Kilpailu samasta resurssista Esim. id:n generointi Ä Transaktioiden analyysi Mitä tauluja käsitellään Mitkä kentät ovat mukana valintaehdoissa ja taulujen yhdistämisessä Mihin kenttiin haku / päivitys kohdistuu Mitä indeksejä on käytettävissä + RDBMS:n erityispiirteet
HELIA 5 (15) SQL-komentojen viritys Ä Yleensä tehokkain tapa parantaa suorituskykyä Ä Optimaalinen SQL-lauseen muoto riippuu Käytettävissä olevista indekseistä Liitoksessa mukana olevien taulujen koosta Käytettävissä olevasta keskusmuistin määrästä Hallintajärjestelmän käyttämästä optimointialgoritmista Ä Tarkkoja ohjeita kyselyjen kirjoittamiseksi vaikea antaa Mahdollista indeksien käyttö hauissa ja liitoksissa (ellei tarkoituksena ole poimia kaikki tietueita) Ä Käytä indeksoitua kenttää sellaisenaan, ei esim. laskutoimituksessa tai funktiossa Hyödynnä joukko-operaatioita (INTERSECT, UNION) Vältä alikyselyjä käytä liitoksia niiden sijasta jos mahdollista Vältä DISTINCT määrettä, vaatii usein tulosrelaation rivien järjestämistä (sort) Ä Tietokannan hallintajärjestelmäkohtaisia optimointiohjeita Esim. taulujen järjestys FROM.. JOIN -osassa
HELIA 6 (15) Tekninen ympäristö Ä Teknisten komponenttien suorituskyky määrää tietyn tiedonhallintajärjestelmäinstanssin suorituskyvyn ylärajan Talletusvälineet (levy- ja nauha-asemat) Laiteohjaimen nopeus Tiedonsiirtoväylän kapasiteetti Prosessorien nopeus ja lukumäärä Keskusmuistin määrä Käytettävissä olevan levymuistin määrä Ä Usein halvin keino parantaa suorituskykyä on hankkia lisää laitekapasiteettia...
HELIA 7 (15) Fyysisen tason ratkaisut Ä Tavoitteena on löytää loogisen tason rakenteelle riittävän tehokas fyysisen tason toteutus 1. Indeksien (hakemistojen) käyttö 2. Taulujen ja indeksien kokomääritykset 3. Taulujen, indeksien ja lokien sijoittelu 4. Sekvenssit (mm. Solidissa) 5. Denormalisointi? Ä Tietokannan suorituskykyyn vaikuttaa yleensä eniten suoritettavien levyoperaatioiden (luku, kirjoitus) määrä Ä Tiedonhaun hinta Keskusmuistista X ns Levyltä peräkkäishakuna 2 ms / sivu Levyltä poimintana 20 ms / sivu Sivukoko 2 4 KB Ä Rinnakkaisuuden hyödyntäminen + Resurssin jonotuksen välttäminen Ä Fyysisen talletusrakenteen optimointi yksittäisen tietokantaoperaation näkökulmasta saattaa olla kokonaisuuden kannalta tehoton!
HELIA 8 (15) Indeksit Saantimenetelmät 1. Peräkkäishaku 2. Indeksoitu peräkkäistiedosto 3. Hajautus Indeksityypit 1. Päähakemisto (primary index) 2. Klusteri-indeksi (clustering index) 3. Toisiohakemisto (secondary index)
HELIA 9 (15) Mitä indeksoida? 1. Pääavaimet Ä mahd. automaattinen indeksointi 2. Viiteavaimet 3. Muut kentät? Ä Valintakriteeri WHERE... Ä Liitoskriteeri JOIN ON... (tyypillisesti viiteavain) Ä Lajittelu ORDER BY... Ä Ryhmittely GROUP BY... 4. Paksut indeksit Ä Mukana kaikki transaktiossa tarvittavat tiedot! Huom! Ä Kenttien järjestys merkitsevää sarakeyhdistelmää käyttävässä indeksissä! Ä Esim. Oraclessa indeksi hyödynnettävissä sarakkeiden osoittamassa järjestyksessä Ä mahd. omat indeksit yhdistelmäindeksin yksittäisille kentille
HELIA 10 (15) Indeksin luonti CREATE [UNIQUE] INDEX index_name ON table_name (column [ASC DESC] [,...]); Tiedonhallintajärjestelmä voi luoda indeksin automaattisesti pääavaimelle Esim. CREATE INDEX i_openimi ON opettaja(sukunimi, etunimi) ; Indeksin poistaminen DROP INDEX index_name;
HELIA 11 (15) Käyttösuosituksia Keskikokoisiin ja isoihin tauluihin Pieniin (*) tauluihin indeksi vain pääavaimelle, (mikäli se tarvitaan rivin yksilöitävyyden säilyttämiseksi!) (*) koko taulu voidaan lukea yhdellä I/O-operaatiolla; < 5 fyysistä lohkoa; lohkon koko RDBMS- ja OS-kohtainen Kun usein haettavan tulosrelaation koko on pieni (< n.20%) suhteessa kyselyn pohjana olevan taulun / taulujen kokonaisrivimäärään l. poiminta tehokkaampi kuin peräkkäishaku Ei usein päivitettäviin kenttiin (?) Ä Dokumentoi! 1. nimi 2. rakenne 3. tarkoitus
HELIA 12 (15) Tietojen tilankäyttöratkaisut Objektin (taulun tai indeksin) luonnin yhteydessä DBMS varaa levyltä tilaa taulua (ja sen rivejä) varten Ä Objektin määrittelyn yhteydessä on mahdollista antaa talletukseen liittyviä parametrejä Ä Tilanvarauksen yksityiskohdat vaihtelevat eri tiedonhallintajärjestelmissä Loogiset 1. Kenttä / Attribuutti 2. Tietue / Rivi 3. Tiedosto / Taulu Fyysiset 1. Bitti 2. Tavu 3. Sana 4. Lohko / Sivu (Block / Page) Yksikkö, joka siirretään kerrallaan apumuistista keskusmuistiin (ja päinvastoin) Fyysinen tietue Koko vaihtelee käyttöjärjestelmän ja laitteistoalustan mukaan Sivuun voi mahtua 1 tai useampi tietue, joskus tietue voi olla niin suuri, että sen tallennukseen tarvitaan useampi sivu
HELIA 13 (15) Tietokantaobjektien kokomäärittely Taulun koko ~ rivien määrä * rivien pituus Rivin pituus ~ sum (kentän pituus) Kentän pituus ~ tietotyyppi * pituus (kentän tallennukseen tarvittavien tavujen määrä) Ä Taululle pyritään varaamaan niin suuri tila, että se mahtuu sinne kokonaan Pitkien sarakkeiden (tietotyyppien) tallennus Ä Sijoita sarakkeet joissa on erittäin pitkiä tietotyyppejä omiin tauluihinsa (ylinormalisoi) SQL-92: Solid: BIT, BIT VARYING LONG Ä Jotta koko tietue mahtuisi yhteen lohkoon (ns. ketjuuntumisen välttäminen)
HELIA 14 (15) Tietokantaobjektien sijoittelu Ä Taulut, indeksit ja lokitiedot eri levyille Ä levyjen rinnakkainen käyttö
HELIA 15 (15) Kokeile ja testaa Ä Tietokantatuotteissa erillisiä työkaluja suorituskyvyn selvittämiseen Solidissa EXPLAIN suoritussuunnitelma explain plan for select * from suoritus; Ä lisätietoa Solid-Server Administrator Guidessa Ä Lisäksi tilastotietoa Levytilan käytöstä (myös tietohakemistossa) Indekseistä (myös tietohakemistossa) Levy I/O:sta Transaktioista Lukituksista Lokitiedoista