HELIA TIKO-05 1 (20) Tiedonhallintajärjestelmän rakenne ja Suorituskyky Tiedonhallintajärjestelmän rakenne... 2 SQL-käsittelijä... 3 Parsinta (Parser)... 3 Optimointi (Optimizer)... 3 Tilan käsittelijä... 4 Puskurin käsittelijä (Buffer Manager)... 4 Tiedoston käsittelijä (File Manager)... 4 Transaktion käsittelijä... 5 Samanaikaisuuden hallinta (Concurrency Control)... 5 Toipumisen hallinta (Recovery Control)... 5 Suorituskyky... 6 Suorituskyvyn mittareita... 6 Tekninen ympäristö... 7 Suorituskyvyn optimointi... 8 Optimointitoimenpiteet... 8 Suunnittele... 9 SQL-komentojen viritys... 10 Fyysisen tason ratkaisut... 11 Indeksit... 12 Looginen ja fyysinen taso... 16 Tietokantaobjektien kokomäärittely... 17 Tietokantaobjektien sijoittelu... 18 Sekvenssit... 19 Kokeile ja testaa... 20
HELIA TIKO-05 2 (20) 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 TIKO-05 3 (20) SQL-käsittelijä Parsinta (Parser) SQL-lauseen jäsennys o Syntaksin tarkistus o Taulu- ja sarakeviittausten tarkistus o Käyttöoikeuksien tarkistus Optimointi (Optimizer) Suoritussuunnitelman valinta l. käytettävät saantimenetelmät Tarvittavat tiedot löytyvät yleensä tietohakemistosta (metadata)
HELIA TIKO-05 4 (20) Tilan käsittelijä Puskurin käsittelijä (Buffer Manager) Keskusmuistin käsittely Pyytää tarvittavat sivut (page / block) tiedostonkäsittelijältä ja sijoittaa muistiin (elleivät ne ole jo siellä) Palauttaa sivut tiedostonkäsittelijälle levylle kirjoitusta varten Tiedoston käsittelijä (File Manager) Tiedostojen sijainti levyillä Saantimenetelmät Hakee / kirjoittaa tarvittavat sivut
HELIA TIKO-05 5 (20) Transaktion käsittelijä Samanaikaisuuden hallinta (Concurrency Control) Eheyden ja erillisyyden hallinta (Consistency & Isolation) Lukitukset Toipumisen hallinta (Recovery Control) Jakamattomuuden ja pysyvyyden hallinta (Atomicity & Durability) Lokit Transaktion käsitteeseen palataan seuraavalla tunnilla
HELIA TIKO-05 6 (20) Suorituskyky 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
HELIA TIKO-05 7 (20) 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...
HELIA TIKO-05 8 (20) Suorituskyvyn optimointi Lähtokohtina 1. Sovelluksen käyttötavat ja tietomäärät 2. Tiedonhallintajärjestelmän rakenne Optimointitoimenpiteet 1. SQL-lauseiden (yleensä kyselyjen) virittäminen 2. Fyysisen tason suunnittelu / talletusratkaisut Indeksit Levytilan käyttö 3. Tietokannan parametrit Puskurialueen koko Sivun koko Fyysisen tason ratkaisut vaikuttavat kyselyjen virittämiseen suunniteltava ja testattava yhdessä
HELIA TIKO-05 9 (20) Suunnittele 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 yhdistämisessä Mihin sarakkeeseen haku / päivitys kohdistuu Mitä indeksejä on käytettävissä + RDBMS:n erityispiirteet
HELIA TIKO-05 10 (20) 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 Tee SQL-käsittelijän työ mahdollisimman helpoksi Tarkkoja ohjeita kyselyjen kirjoittamiseksi vaikea antaa Mahdollista indeksien käyttö hauissa ja liitoksissa (ellei tarkoituksena ole poimia kaikki tietueita) Käytä indeksoitua saraketta sellaisenaan, ei esim. laskutoimituksessa tai funktiossa Käytä aina taulun nimeä tai aliasta sarakeviittauksissa Hyödynnä joukko-operaatioita (INTERSECT, UNION) Vältä alikyselyjä käytä liitoksia niiden sijasta jos mahdollista Vältä OR operaattoria ehtolausekkeissa Tietokannoissa tuotekohtaisia optimointiohjeita mahdollisesti myös vaihtoehtoisia optimointialgoritmeja (esim. sääntö- tai tilastoperustainen rule based / cost based optimizer)
HELIA TIKO-05 11 (20) 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) 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 nykyisin 8 KB (Oracle, DB2, SQL-Server oletus) Rinnakkaisuuden hyödyntäminen + Resurssin jonotuksen välttäminen Fyysisen talletusrakenteen optimointi yksittäisen tietokantaoperaation näkökulmasta saattaa olla kokonaisuuden kannalta tehoton!
HELIA TIKO-05 12 (20) Indeksit Saantimenetelmät 1. Peräkkäishaku 2. Indeksoitu peräkkäistiedosto 3. Hajautus Indeksityypit 1. Päähakemisto (primary index) 2. Toisiohakemisto (secondary index) Indeksien avulla pyritään mahdollistamaan poiminta aina, kun se on tarkoituksenmukaista (vähemmän levy-i/o:ta)
HELIA TIKO-05 13 (20) 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 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 sarakkeille
HELIA TIKO-05 14 (20) 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 TIKO-05 15 (20) Käyttösuosituksia Keskikokoisiin ja isoihin tauluihin Pieniin tauluihin vain pääavainindeksi Ei usein päivitettäviin sarakkeisiin Dokumentoi indeksi! 1. nimi 2. rakenne 3. tarkoitus
HELIA TIKO-05 16 (20) Looginen ja fyysinen taso 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. Sivu / Lohko (Page / Block) 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 Oraclessa tyypillinen sivukoko 2 4 8 KB
HELIA TIKO-05 17 (20) 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ä) Lisäksi tarvitaan jonkin verran tilaa RDBMS:n tarvitsemille rakenteille (n.10%) Taululle pyritään varaamaan niin suuri tila, että se mahtuu sinne kokonaan (peräkkäishauissa ei tarvita lukupään uudelleenkohdistamista) Oraclen tilanvarausparametrejä käsitellään syventävällä Tietokantasuunnittelu -kurssilla
HELIA TIKO-05 18 (20) Tietokantaobjektien sijoittelu Taulut, indeksit ja lokitiedot eri levyille levyjen rinnakkainen käyttö ns. RAID -levynohjausjärjestelmä huolehtii itse datan tarkoituksenmukaisesta sijoittelusta
HELIA TIKO-05 19 (20) 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 (ts. numeroavaruudessa saattaa olla reikiä) 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;
HELIA TIKO-05 20 (20) Kokeile ja testaa Tietokantatuotteissa erillisiä työkaluja suorituskyvyn selvittämiseen Oraclessa EXPLAIN suoritussuunnitelma explain plan for <komento>; explain plan for select * from taulu; explain plan tallettaa komennon suoritussuunnitelman PLAN_TABLE tauluun. Suunnitelma otetaan taulusta esiin erityisellä SELECT-kommennolla. suoritussuunnitelmasta käy ilmi mm, aikooko RDBMS käyttää SELECT-komennon suorittamisessa indeksejä apuna vai tehdä tiedon hakuja peräkkäishakuna (Table Access Full). Lisätietoa Oracle Performance Tuning Guide and Reference Lisäksi tilastotietoa (trace) Levytilan käytöstä (myös tietohakemistossa) Indekseistä (myös tietohakemistossa) Levy I/O:sta Transaktioista Lukituksista Lokitiedoista