HELIA 1 (21) Luento 3.1 Suorituskyvyn optimointi... 2 Suunnittele... 3 Tiedonhallintajärjestelmän rakenne... 4 SQL-käsittelijä... 5 Parsinta... 5 Optimointi... 5 Tilan käsittelijä... 5 Puskurin käsittelijä (Buffer Manager)... 5 Tiedoston käsittelijä (File Manager)... 5 Transaktion käsittelijä... 5 Samanaikaisuuden hallinta (Concurrency Control)... 5 Toipumisen hallinta (Recovery Control)... 5 Suorituskyvyn lähteet... 6 SQL-komentojen viritys... 7 Tekninen ympäristö... 8 Fyysisen tason ratkaisut... 9 Saantimenetelmät... 11 Indeksit / Hakemistot... 12 Kokeile ja testaa... 20 Naularaportit... 20
HELIA 2 (21) Suorituskyvyn optimointi Mitä tietokannan suunnittelija voi tehdä 1. Kyselyjen virittäminen 2. Fyysisen tason suunnittelu / talletusratkaisut Ä 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 (21) 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 4 (21) 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 5 (21) SQL-käsittelijä Parsinta SQL-lauseen jäsennys Optimointi Suoritussuunnitelman valinta Tilan käsittelijä Puskurin käsittelijä (Buffer Manager) Keskusmuistin käsittely Pyytää lohkot tiedostonkäsittelijältä ja sijoittaa muistiin Palauttaa lohkot tiedostonkäsittelijälle Tiedoston käsittelijä (File Manager) Tiedostojen sijainti ja saantimenetelmät Hakee / kirjoittaa tarvittavat lohkot Transaktion käsittelijä Samanaikaisuuden hallinta (Concurrency Control) Eheyden ja erillisyyden hallinta (Concistency & Isolation) Ä Lukitukset Toipumisen hallinta (Recovery Control) Jakamattomuuden ja pysyvyyden hallinta (Atomicity & Durability) Ä Lokit
HELIA 6 (21) Suorituskyvyn lähteet 1. SQL-lauseiden säätäminen 2. Indeksien säätäminen opt. 3. Levytilankäytön säätäminen disk 4. Puskurien säätäminen buff.
HELIA 7 (21) SQL-komentojen viritys Ä Yleensä tehokkain tapa parantaa suorituskykyä Tietokantaohjelmoinnin alaa... Ä Optimaalinen 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ä kyselyjen optimointialgoritmista Ä Tarkkoja ohjeita kyselyjen kirjoittamiseksi vaikea antaa Mahdollista indeksien käyttö hauissa ja liitoksissa (ellei tarkoituksena ole poimia kaikki tietueita) 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) Suunnittele työnjako tietokantapalvelimen ja asiakassovelluksen välille Ä Tietokannan hallintajärjestelmäkohtaisia optimointiohjeita Esim. taulujen järjestys FROM.. JOIN -osassa
HELIA 8 (21) 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 9 (21) 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. Oraclessa) 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 10 (21) Saantimenetelmät 1. Peräkkäishaku 2. Indeksoitu peräkkäistiedosto 3. Hajautus
HELIA 11 (21) Indeksit / Hakemistot Sarakkeen tai sarakeyhdistelmän perusteella muodostettu aputietorakenne, jonka tarkoituksena on nopeuttaa tiedonsaantia. Datatiedosto (Data File)sisältää loogiset tietueet Hakemistotiedosto / Indeksitiedosto (Index File) sisältää indeksitietueet AUTO HAKEMISTO Rowid Auto# Merkki...... Merkki rowid 1 1011 Volvo Audi 2 2 0235 Audi Renault 3 3 0011 Renault Toyota 4 4 0551 Toyota Volvo 1 Ä Nopeuttaa kyselyjä Ä Hidastaa päivityksiä Indeksoidun ominaisuuden arvon perusteella tehtävä haku nopeutuu muutama levyhaku vrs. koko taulun läpikäynti Ä Tietty indeksi saattaa nopeuttaa yhtä kyselyä ja hidastaa toista Haittoja: Å Testaa (kattavasti)! Ä Vie levytilaa Ä Indeksin sivusta voi tulla jonotettava resurssi (pullonkaula)
HELIA 12 (21) Indeksityypit 1. Päähakemisto (primary index) 2. Toisiohakemisto (secondary index) 3. Klusteri-indeksi Indeksin talletusrakenteet 1. Yksitasoiset 2. Puu-rakenteiset
HELIA 13 (21) Päähakemisto (Primary index) Datatiedosto on lajiteltu peräkkäistiedosto joka on järjestetty pääavaimen mukaan Pääindeksin hakukenttänä on datatiedoston 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...
HELIA 14 (21) Ryhmähakemisto / Järjestyshakemisto (Clustering index) Indeksin hakukenttä >< tiedoston avainkenttä Datatiedosto on järjestetty klusteri-indeksin hakukentän mukaan (ei siis pääavaimen mukaan) Klusteri-indeksin hakukentän ei tarvitse sisältää uniikkiarvoja, ts. useampi kuin yksi tietue voi vastata indeksin hakukentän arvoa Autotiedosto Klusteri-indeksi 1 0235 Audi Audi 1 2 0011 Renault Renault 2 3 1200 Renault Renault 3 4 0551 Toyota Toyota 4 5 1011 Volvo Volvo 5... Datatiedostolla voi olla vain yksi päähakemisto tai ryhmähakemisto!
HELIA 15 (21) Toisiohakemisto (Secondary index) Indeksi on määritelty datatiedoston kentästä, jonka mukaan datatiedostoa ei ole järjestetty (ei pääavaimen eikä klusteriavaimen mukaisesti) Toisiohakemiston hakukentän ei tarvitse sisältää uniikkiarvoja Toisioavaimeksi valitaan kenttä / kenttiä, joiden perusteella tietoa haetaan usein Esim. Henkilön nimi Autotiedosto Hakemisto 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...
HELIA 16 (21) 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 Ä Usein päivittyvän kentän indeksointi voi tehdä indeksistä pullonkaulan esim. tilin saldo
HELIA 17 (21) Oraclen syntaksi
HELIA 18 (21) 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 Ä Pudota ja luo uudestaan aika-ajoin Ä Pudota ennen massapäivitystä ja luo sen jälkeen uudestaan; (ei pudota pääavaimista huolehtivia indeksejä)
HELIA 19 (21) Kokeile ja testaa Ä Tietokantatuotteissa erillisiä työkaluja suorituskyvyn selvittämiseen Naularaportit spike report vasteaika NAULA syyllinen uhri CPU I/O CPU Q Lock Q I/O Q Ä Syyllisen vasteaika koostuu lähinnä tietokannan palveluajasta CPU / SQL - paljon SQL-kutsuja I/O / Path - paljon sivuja / SQL-kutsu Ä Uhrin vasteaika koostuu lähinnä jonotusajasta Q-CPU - paljon CPU-jonotusta Q-I/O - paljon levytaltiojonotusta Q-Lock - paljon lukko-odotusta
HELIA 20 (21) Oraclessa: SQL_Trace tallentaa suoritustietoa TKPROF käsittelee em. suoritustietoa EXPLAIN ANALYZE suoritussuunnitelma rivien ketjuuntuminen Ä Lisäksi tilastotietoa Levytilan käytöstä (myös tietohakemistossa) Indekseistä (myös tietohakemistossa) Levy I/O:sta Transaktioista Lukituksista Lokitiedoista