HAAGA-HELIA Heti-09 1 (17) Suorituskyky Suorituskyky... 2 Suorituskyvyn mittareita... 2 Tekninen ympäristö... 3 Suorituskyvyn optimointi... 4 Optimoinnin kohteet... 5 Fyysisen tason ratkaisut... 6 Indeksointi... 7 Saantimenetelmät ja Tiedosto-organisaatio... 7 Peräkkäistiedosto... 8 Indeksoitu peräkkäistiedosto... 8 Indeksityypit... 10 Päähakemisto... 10 Toisiohakemisto... 11 Mitä indeksoida?... 12 SQL-komentojen viritys... 15 Sekvenssit... 16 Suoritussuunnitelma... 17
HAAGA-HELIA Heti-09 2 (17) Suorituskyky Tärkeintä tietokannan käytössä on, että tieto on luotettavaa Toiseksi tärkeintä on tietokannan suorituskyky Suorituskyvyn mittareita Vasteaika (response time) Yksittäisten operaatioiden suorittamiseen kuluva aika, mittayksikkö sekunti 1. CPU 2. Levy I/O 3. Lukko-odotus Nykyteknologian aikana kohtuullisena vastausaikana pidetään noin 1-2 sekuntia. Suoritusteho (troughput) Operaatioiden lukumäärä aikayksikköä kohti mittausyksikkö: tapahtumaa / sekunti
HAAGA-HELIA Heti-09 3 (17) Tekninen ympäristö Teknisten komponenttien suorituskyky määrää tietyn tietokannanhallintajärjestelmäinstanssin suorituskyvyn ylärajan Talletusvälineet (levy-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...
HAAGA-HELIA Heti-09 4 (17) Suorituskyvyn optimointi Lähtokohtana sovelluksen käyttötavat ja tietomäärät Sovelluksen keskeinen / kriittinen tieto Iso tapahtumatiheys Iso volyymi = rivimäärä Iso volyymin muutos = nopea kasvu Kilpailu samasta resurssista Esim. id:n generointi: (select max(id) + 1) Transaktioiden analyysi Mitä tauluja käsitellään Mitkä sarakkeet ovat mukana valintaehdoissa ja taulujen liitoksissa Mihin sarakkeisiin haku / päivitys kohdistuu Mitä indeksejä on käytettävissä + RDBMS:n mahd. erityispiirteet
HAAGA-HELIA Heti-09 5 (17) Optimoinnin kohteet 1. Fyysisen tason suunnittelu / ratkaisut Indeksit Sekvenssit Levytilan käyttö 2. SQL-lauseiden (yleensä kyselyjen) virittäminen 3. Tietokannan parametrit Puskurialueen koko Sivun koko Fyysisen tason ratkaisut vaikuttavat kyselyjen virittämiseen suunniteltava ja testattava yhdessä Suurin hyöty saadaan yleensä tarkoituksenmukaisella indeksoinnilla ja indeksien hyödyntämisellä SQL-kyselyissä Tällä kurssilla tutustutaan vain indeksointiin ja sen hyödyntämiseen SQL-lauseissa
HAAGA-HELIA Heti-09 6 (17) Fyysisen tason ratkaisut Tavoitteena on löytää loogisen tason rakenteelle riittävän tehokas fyysisen tason toteutus 1. Indeksien (hakemistojen) käyttö 2. Sekvenssien (id-numeron generointi) käyttö 3. Tietokantaobjektien sijoittelu 4. Tietokantaobjektien kokomääritykset 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 sivu = fyysinen tietue apumuistista keskusmuistiin (ja takaisin) siirrettävä tietomäärä sivukoko nykyisin 8 KB (Oracle, DB2, SQL-Server) + Rinnakkaisuuden hyödyntäminen + Resurssin jonotuksen välttäminen Fyysisen talletusrakenteen optimointi yksittäisen tietokantaoperaation näkökulmasta saattaa olla kokonaisuuden kannalta tehoton! Ratkaisut on testattava kattavasti
HAAGA-HELIA Heti-09 7 (17) Indeksointi Fyysisellä tasolla tietokannan taulut (ja data) tallennetaan yhteen tai useampaan tiedostoon Indeksi on tietorakenne, jonka avulla voidaan nopeasti hakea = poimia tietty tietue / tietueet peräkkäistiedostosta Saantimenetelmät ja Tiedosto-organisaatio Saantimenetelmä Miten tietoja voidaan hakea tiedostoista ja tallentaa tiedostoihin 1. Peräkkäishaku 2. Poiminta (=suorasaanti) 2.1. Poiminta indeksin avulla 2.2. Poiminta hajautusalgoritmin avulla Käytettävissä olevat saantimenetelmät riippuvat tiedoston organisointitavasta Tiedosto-organisaatio Miten tiedot on fyysisesti järjestetty tiedostoon 1. Peräkkäistiedosto 2. Indeksoitu peräkkäistiedosto 3. Hajarakenne (hash file) Tällä kurssilla tutustutaan vain peräkkäistiedostoihin, sillä ne ovat tavallisimmat tiedosto-organisaatiot relaatiotietokannoissa
HAAGA-HELIA Heti-09 8 (17) Peräkkäistiedosto Heap file Yksinkertaisin organisointitapa Tietueet varastoidaan siinä järjestyksessä kuin ne ilmaantuvat ts. uusi tietue sijoitetaan tiedoston loppuun poistettujen tietueiden vapauttamaa tilaa ei täytetä uusilla tietueilla Ainut saantimenetelmä on peräkkäishaku Lisääminen on tehokasta Tietyn tiedon haku hidasta (esim. tiedon lukua, päivitystä, poistoa varten) Suurten tietuemäärien luku nopeaa Indeksoitu peräkkäistiedosto Indexed sequential files Datatiedosto, jolle on määritelty pääindeksi Rakenne sallii sekä peräkkäiskäsittelyn että poiminnan Nykyään eniten käytetty tiedosto-organisaatio
HAAGA-HELIA Heti-09 9 (17) Indeksoidussa peräkkäistiedostossa on 2 tietorakennetta: Datatiedosto (Data File) sisältää loogiset tietueet Indeksitiedosto / Hakemistotiedosto (Index File) sisältää indeksitietueet Indeksitiedoston tietueessa on 2 kenttää: 1. hakukenttä (Indexing Field) 2. osoitekenttä, jonka arvona on sen sivun osoite, missä hakukenttää vastaava tietue sijaitsee Vrt. Kirjan hakemisto Indeksitiedoston tietueet on järjestetty hakukentän mukaan Datatiedosto Indeksi 1 0011 Volvo 0011 1 1 0551 Renault 0235 n n 0235 Audi 0551 1 n 1011 Toyota 1011 n Haku indeksoidun kentän mukaan nopeaa Uusien tietueiden lisäys ja poisto hieman hitaampaa, sillä datatiedoston lisäksi on päivitettävä indeksitiedostoa (huom: päivityksiä on tyypillisesti vähemmän kuin hakuja)
HAAGA-HELIA Heti-09 10 (17) Indeksityypit 1. Päähakemisto (primary index) 2. Toisiohakemisto (secondary index) Päähakemisto Primary Index Pääindeksin hakukenttänä on datatiedoston pääavain Pääindeksin hakukentän arvot ovat uniikkeja / yksilöiviä Autotiedosto Pääindeksi 1 0011 Renault 0011 1 2 0235 Audi 0235 2 3 0551 Toyota 0551 3 4 1011 Volvo 1011 4 5 1200 Renault 1200 5... Pääavain
HAAGA-HELIA Heti-09 11 (17) Toisiohakemisto Secondary Index Toisioavaimeksi valitaan kenttä / kenttiä, joiden perusteella tietoa haetaan usein Toisiohakemiston hakukentän ei tarvitse sisältää uniikkiarvoja Esim. Henkilön nimi Autotiedosto Toisioindeksi 1 0011 Renault Audi 2 2 0235 Audi Renault 1 3 0551 Toyota Renault 5 4 1011 Volvo Toyota 3 5 1200 Renault Volvo 4... esim. viiteavaimista tehdään usein toisiohakemisto
HAAGA-HELIA Heti-09 12 (17) Mitä indeksoida? 1. Pääavaimet mahd. automaattinen indeksointi (esim. Oracle) 2. Viiteavaimet mahd. automaattinen indeksointi (esim. Solid) 3. Muut sarakkeet? Valintakriteeri WHERE... Liitoskriteeri JOIN ON... (tyypillisesti viiteavain) Lajittelu ORDER BY... Ryhmittely GROUP BY... 4. Paksut indeksit? Mukana kaikki transaktiossa tyypillisesti tarvittavat tiedot! Indeksien avulla pyritään mahdollistamaan poiminta aina kun se on tarkoituksenmukaista (vähemmän levy-i/o:ta) Huom! Sarakkeiden 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 sarakkeille
HAAGA-HELIA Heti-09 13 (17) 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, openo) ; Indeksin poistaminen DROP INDEX index_name;
HAAGA-HELIA Heti-09 14 (17) Käyttösuosituksia Keskikokoisiin ja isoihin tauluihin Pieniin tauluihin vain pääavainindeksi Ei usein päivitettäviin sarakkeisiin Dokumentoi! 1. nimi 2. rakenne 3. tarkoitus
HAAGA-HELIA Heti-09 15 (17) 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ä Tiedonhallintajärjestelmän käyttämästä optimointialgoritmista Mahdollista indeksien käyttö hauissa ja liitoksissa (ellei tarkoituksena ole poimia kaikki tietueita) Käytä indeksoitua saraketta hauissa ja liitoksissa sellaisenaan, ei esim. laskutoimituksessa tai funktiossa Tietokannoissa tuotekohtaisia optimointiohjeita mahdollisesti myös vaihtoehtoisia optimointialgoritmeja (esim. sääntö- tai tilastoperustainen rule based / cost based optimizer)
HAAGA-HELIA Heti-09 16 (17) Sekvenssit Pääavainten generoimiseen voi käyttää sekvenssiä Sekvenssi on tehokkain tapa generoida uusi id Vanha tapa: select max(id) + 1 Sekvenssi mukana SQL-2003 standardissa Oraclessa sekvenssi ei takaa id-numeroiden 'peräkkäisyyttä' mutta se takaa niiden erilaisuuden l. identifioivuuden Sekvenssi luodaan komennolla CREATE SEQUENCE sekvenssin_nimi START WITH <integer> INCREMENT BY <integer> Sekvenssin arvoihin viitataan Oraclessa Sekvenssin_nimi.NEXTVAL Sekvenssin_nimi.CURRVAL Sekvenssi poistetaan komennolla DROP SEQUENCE sekvenssin_nimi SQL Server ei tue sekvenssiä Vastaava toiminnallisuus saadaan käyttämällä esim. pääavainsarakkeen identity ominaisuutta.
HAAGA-HELIA Heti-09 17 (17) Suoritussuunnitelma Tietokantatuotteissa erillisiä työkaluja suorituskyvyn selvittämiseen Oraclessa EXPLAIN PLAN suoritussuunnitelma explain plan for <komento>; explain plan for select * from taulu; explain plan tallentaa komennon suoritussuunnitelman PLAN_TABLE tauluun Suunnitelma haetaan taulusta SELECT-kommennolla suoritussuunnitelmasta käy ilmi mm. käytetäänkö SQLkomennon suorittamisessa indeksejä apuna vai tehdäänkö peräkkäishaku (Table Access Full) Lisätietoa Oracle Performance Tuning Guide and Reference