Kyselyiden optimointi

Samankaltaiset tiedostot
Kyselypuut ja ekvivalenssi. Kyselyiden optimointi. Kyselypuut ja ekvivalenssi. Kyselypuut ja ekvivalenssi. R & G Chapter 12-15

D B. Kyselypuut ja ekvivalenssi

Helsingin yliopisto/tktl Kyselykielet, s 2006 Optimointi Harri Laine 1. Kyselyn optimointi. Kyselyn optimointi

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

SQL - STRUCTURED QUERY LANGUAGE

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

D B. Tietokannan hallinta kertaus

FROM-lausekkeessa voidaan määritellä useampi kuin yksi taulu, josta tietoja haetaan: Tuloksena on taululistassa lueteltujen taulujen rivien

Kyselyt: Lähtökohtana joukko lukuja Laskukaava kertoo miten luvuista lasketaan tulos soveltamalla laskentaoperaatioita

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

HELIA TIKO-05 1 ( 12) ICT03D Tieto ja tiedon varastointi Martti Laiho

Relaatioalgebra. Kyselyt:

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto. Opettajien nimet: Opiskelijoiden pääaineet

Joko tunnet nämän Oracle10g SQL:n piirteet? Kari Aalto Saariston IT

TIEDONHALLINTA - SYKSY Luento 10. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto.

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

Relaatioalgebra. Relaatioalgebra. Relaatioalgebra. Relaatioalgebra - erotus (set difference) Kyselyt:

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

joukko operaatioita, joilla relaatioista voidaan muodostaa uusia relaatioita joukko opin perusoperaatiot yhdiste, erotus, ristitulo, leikkaus

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

Kyselyn yleisrakenne:

Helsingin yliopisto/ tktl D Tietokantojen perusteet, s 2000 Relaatioalgebra. Harri Laine 1. Relaatioalgebra.

Lisätään avainarvo 1, joka mahtuu lehtitasolle:

Kyselyiden käsittely. R & G Chapter Tietokannan hallinta, kevät 2006, Jan 1

HELIA 1 (15) Outi Virkki Tiedonhallinta

D B. Kyselyjen käsittely ja optimointi. Kyselyn käsittelyn vaiheet:

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

4. Kyselyjen käsittely ja optimointi

Harjoitustehtävä 1. Harjoitustehtävän 1 ratkaisu. Harjoitustehtävä 1. Relaatioalgebra -liitokset (join) Liitos

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)]

CSE-A1200 Tietokannat

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 SQL-perusteet. Harri Laine 1. SQL tietokantakieli

Helsingin yliopisto/ tktl DO Tietokantojen perusteet, s 2000 Relaatioalgebra Harri Laine 1. Relaatioalgebra

Helsingin yliopisto/tktl Tietokannan hallinta, s Harri Laine 1 D B. Kyselyjen käsittely ja optimointi

HELIA 1 (14) Outi Virkki Tiedonhallinta

3. Taulujen määrittely ja muuttaminen

Harjoitustehtävä 1. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. SQL kysely

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 SQL:n perusteet. Harri Laine 1. SQL tietokantakieli. SQL tietokantakieli

SELECT-lauseen perusmuoto

Liitokset - haut useaan tauluun

D B. Tietokannan hallinta - kurssin tavoite. Kurssilla opitaan periaatteet. Edellytyksenä osallistumiselle on Tietokantojen perusteiden hallinta

CSE-A1200 Tietokannat

3. TAULUJEN MÄÄRITTELY JA MUUTTAMINEN

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

Kirjoita jokaiseen erilliseen vastauspaperiin kurssin nimi, tenttipäivä, oma nimesi (selkeästi), opiskelijanumerosi ja nimikirjoituksesi

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

CSE-A1200 Tietokannat

Lisätään avainarvo 6, joka mahtuu lehtitasolle:

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia

Excel-taulukkoon X- ja Y-sarakkeisiin tallennettujen koordinaattien muuntaminen paikkatietokohteiksi

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

HELIA TIKO-05 1 (22) ICT03D Tieto ja tiedon varastointi E.Räty, O.Virkki

OUTER JOIN se vanha kunnon kaveri

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa

HELIA 1 (14) Outi Virkki Tiedonhallinta

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

DOORSin Spreadsheet export/import

Helsingin yliopisto/tktl Kyselykielet, s 2006 Tietokantaoperaatioiden toteutuksesta Harri Laine 1. Kyselyjen käsittely

Näkymät ja tiedon suojaus

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Oppiva kyselynoptimointi

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

D B. Kyselyjen käsittely ja optimointi. Kyselyjen käsittely ja optimointi

SQL-KYSELYJEN OPTIMOINNISTA. Niko Jalkanen Joensuun yliopisto Tietojenkäsittelytiede Pro gradu tutkielma

HELIA 1 (13) Outi Virkki Tietokantasuunnittelu

HELIA 1 (16) Outi Virkki Tietokantasuunnittelu

HAAGA-HELIA TIKO-05 1 (19) ICT23a Tietokannan suunnittelu ja toteutus O.Virkki

Tilastollinen vastepintamallinnus: kokeiden suunnittelu, regressiomallin analyysi, ja vasteen optimointi. Esimerkit laskettu JMP:llä

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Summamuuttujat, aineiston pilkkominen ja osa-aineiston poiminta 1

HELIA TIKO-05 1 (15) ICT03D Tieto ja tiedon varastointi Räty, Virkki

Tietokannat II -kurssin harjoitustyö

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

Relaation tyhjyyden testaaminen

HAAGA-HELIA Heti-09 1 (17) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Suorituskyky

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

DOORS Word DOORS SoftQA Pekka Mäkinen

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

SQL-kielen perusteet. Tietokantojen perusteet

HELIA 1 (11) Outi Virkki Tiedonhallinta

4.3.4 SQL kyselyt... 45

Transkriptio:

Kyselyiden optimointi R & G Chapter 12 15 16.02.06 Tietokannan hallinta, kevät 2006, Jan 1

Kyselypuut ja ekvivalenssi Sisäisessä esityksessä kyselyt esitetään kyselypuuna lehdissä taulut juuressa lopputulos välisolmuina suoritettavat operaatiot select teos.nimi, kirjanro from kurssi, materiaali, teos where kurssi.nro=materiaali.kurssi and materiaali.kirja=teos.nimi and materiaali.tyyppi= P and kurssinimi= Tietokannan hallinta π teos.nimi, kirjanro σ kurssi.nimi= Tietokannan hallinta σ materiaali.kirja=teos.nimi σ kurssi.nro=materiaali.kurssi σ materiaali.tyyppi= P x x kurssi materiaali teos 16.02.06 Tietokannan hallinta, kevät 2006, Jan 2

Kyselypuut ja ekvivalenssi Optimoitu kyselypuu valinnat mahdollisimman aikaisin ristitulot liitoksiksi select teos.nimi, kirjanro from kurssi, materiaali, teos where kurssi.nro=materiaali.kurssi and materiaali.kirja=teos.nimi and materiaali.tyyppi= P and kurssinimi= Tietokannan hallinta kurssi.nro=materiaali.kurssi π teos.nimi, kirjanro materiaali.kirja=teos.nimi σ kurssi.nimi= Tietokannan hallinta σ materiaali.tyyppi= P kurssi materiaali teos 16.02.06 Tietokannan hallinta, kevät 2006, Jan 3

Kyselypuut ja ekvivalenssi Kyselypuun muokkauksessa vaihdetaan operaatioiden järjestyksiä tai korvataan jokin operaatio toisella operaatiolla. Muokatun kyselypuun pitäisi tuottaa sama tulos kuin aiemman. Kaksi operaatiosarjaa ovat ekvivalentteja, jos ne tuottavat saman tuloksen lähtötaulujen kaikilla instansseilla. ekvivalenssisäännöt määrittelevät millaiset muunnokset ovat sallittuja ilman, että tulos muuttuu. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 4

Kyselypuut ja ekvivalenssi Valinnat voidaan yhdistää tai purkaa sisäkkäisiksi σ c1 c2... ck (R) σ c1 (σ c2 (... σ ck (R)..)) Valinnat ovat vaihdannaisia (commutative) σ c1 ( σ c2 (R)) σ c2 (σ c1 ( R)) Peräkkäisten projektioiden lopputuloksen määrä viimeisin projektio π a1 (R) π a1 (π a2 (..(R))) 16.02.06 Tietokannan hallinta, kevät 2006, Jan 5

Kyselypuut ja ekvivalenssi Ristitulon ja liitoksen ovat kommutatiivisia, osapuolten järjestys voidaan vaihtaa (kumpi on ulompi) RxS SxR R S S R Ristulo ja liitos ovat assosiatiiviset (suoritusjärjestys on vaidettavissa) Rx(SxT) (RxS)xT 16.02.06 Tietokannan hallinta, kevät 2006, Jan 6

Kyselypuut ja ekvivalenssi Projektion ja valinnan järjestys on vaihdettavissa kunhan kaikki valinnassa esiintyvät sarakkeet ovat mukana projektiossa. σ c (π a (R)) π a (σ c (..(R))) Valinta ja ristitulo voidaan yhdistää liitokseksi, jos kyseessä on liitosehto. R c S σ c (RxS) Valinta voidaan siirtää tapahtuvaksi ennen ristituloa tai liitosta, mikäli se koskee vain näiden argumenttia. σ c (RxS) σ c (R)xS 16.02.06 Tietokannan hallinta, kevät 2006, Jan 7

Kyselypuut ja ekvivalenssi Yleisesti valinta σ c (RxS) voidaan jakaa tauluja R ja S koskeviin osiin sekä liitosehtoon. σ c (RxS) σ c (σ cr (R) x σ cs ( S)) Projektio voidaan jakaa osiin jotka suorittetaan ennen ristituloa. π a (RxS) π a1 (R) x π a2 (S) Projektio voidaan jakaa osiin, jotka suoritetaan ennen liitosta, jos liitosehdon sarakkeet säilyvät. π a (R S) π a1 (R) π a2 (S) 16.02.06 Tietokannan hallinta, kevät 2006, Jan 8

Heuristisia muokkaussääntöjä 1. Hajotetaan disjuktiiviset valinnat valintojen yhdisteiksi. 2. Hajotetaan konjuktiiviset valinnat valintojen jonoiksi. 3. Tynöönetään valinnat mahdollisimman syvälle lausekkeeseen. 4. Työnnetään projektiot mahdollisimman syvälle lausekkeeseen. 5. Jokainen valintaoperaatio, jonka liitosehtona on kahden attribuutin yhtäläisyysehto, ja tämän argumenttina oleva karteesinen tulo tai liitos yhdistetään yhdeksi liitokseksi. 6. Useamman relaation liitoksen ryhmitellään niin, että ensiksi lasketaan liitokset, joiden argumenttirelaatiot arvioidaan pinikokoisimmiksi. 7. Yhdistetään jokainen peräkkäisistä valinnoista ja projektioista koostuva operaatiojono yhdeksi valinnaksi, yhdeksi projektioksi tai yhdeksi valintaprojektioksi. 8. Määrätään ne alilausekkeet, joiden operaatiot voidaan putkittaa. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 9

Rajaavuus Rajaavuutta (selectivity) mitataan rajaus suhteella (reduction factor): tuloksen rivimäärä / lähtöjoukon rivimäärä Rajaavuuden arviointi ilman tilastotietoja on hankalaa. Kun testataan avaita yhtäsuuruutta suhteessa vakioon tuloksen koko on enintään 1 ja rajaussuhde 1/taulun koko (jos taulun kokoa ei tiedetä, sen tilalla voidaan käyttää taululle tehdyn tilanvarauksen kokoa, tai jotain vakiota, jos tätäkään ei tiedetä.). sarakkeen yhtäsuuruus verrattuna vakioon tuottaa tasaisen jakautuman oletuksella rajaussuhteen 1/sarakkeen arvojen lukumäärä. (jos sarakkeella on hakemisto voi arvojen lukumäärä olla tiedossa, tietotyypin määritys voi rajata arvojoukon esim. numeric(2) enintään 100 arvoa, järjestelmä voi käyttää oletusarvoa esim 1/10, jos sillä ei ole parempaa tietoa). 16.02.06 Tietokannan hallinta, kevät 2006, Jan 10

Rajaavuus Täsmällisemmän tiedon saanti rajaavuudesta edellyttää tilastotietoa: taulun koko (riveinä, sivuina) sarakkeen arvojen lukumäärä (riittää jos oletetaan tasainen jakautuma) sarakkeen arvojakautuma (histogrammi) käyttökelpoinen, jos jakautuma on hyvin vino. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 11

Kustannuslaskentaoptimointi Laskenta edellyttää tilastoaineistoa. Tilastoaineisto pitää uudistaa kun tietokantaan on tehty merkittävästi muunnoksia. Tilastoaineistoon kuuluvat esim. taulujen ja indeksien koot sivujen lukumäärä, täyttösuhde sarakeen pienin ja suurin arvo, mahdollinen arvojen jakautumatieto 16.02.06 Tietokannan hallinta, kevät 2006, Jan 12

Kustannuslaskentaoptimointi Esimerkiksi Oraclessa on komento Analyze, jolla kustannuslaskennassa tarvittavan tilastotiedon saa tuotettua. Analyze table opiskelija estimate statistics; laskee taulukohtaisia tilastotietoja oletuskokoisen otoksen perusteella (otoskoon voi myös antaa). Analyse table opiskelija compute statistics for columns aloitusvuosi size 10; laskee sarakkeelle tilastotietoja käymällä läpi koko taulun, tuottaa myös jakautumatiedon (arvoväli jaettu 10 osaan). 16.02.06 Tietokannan hallinta, kevät 2006, Jan 13

Kustannuslaskentaoptimointi Oraclessa optimoijan tekemään suunnitelman saa selville lauseella EXPLAIN PLAN. esim: EXPLAIN PLAN SET STATEMENT_ID = 'Raise in Chicago' INTO plan_table FOR UPDATE emp SET sal = sal * 1.10 WHERE deptno = (SELECT deptno FROM dept WHERE loc = 'CHICAGO'); Yllä suunnitelma kirjoitetaan tässä plan_table nimiseen tauluun. Taulu täytyy olla luotu ennen lauseen käyttöä sen rakenne on seuraava: 16.02.06 Tietokannan hallinta, kevät 2006, Jan 14

Kustannuslaskentaoptimointi CREATE TABLE plan_table ( statement_id VARCHAR2(30), timestamp DATE, remarks VARCHAR2(80), operation VARCHAR2(30), options VARCHAR2(30), object_node VARCHAR2(128), object_owner VARCHAR2(30), object_name VARCHAR2(30), object_instance NUMERIC, object_type VARCHAR2(30), optimizer VARCHAR2(255), search_columns NUMERIC, id NUMERIC, parent_id NUMERIC, position NUMERIC, cost NUMERIC, cardinality NUMERIC, bytes NUMERIC, other_tag VARCHAR2(255), other LONG); tieto taulussa puumaisena rakenteena, parent_id kertoo mikä operaatio suoritetaan rivillä kuvattavan jälkeen 16.02.06 Tietokannan hallinta, kevät 2006, Jan 15

Kustannuslaskentaoptimointi esim hierarkkinen kysely SELECT LPAD(' ',2*(LEVEL 1)) operation operation, options, object_name, position FROM plan_table START WITH id = 0 AND statement_id = 'Raise in Chicago' CONNECT BY PRIOR id = parent_id AND statement_id = 'Raise in Chicago'; voisi tuottaa tuloksen OPERATION OPTIONS OBJECT_NAME POSITION UPDATE STATEMENT 1 FILTER 0 TABLE ACCESS FULL EMP 1 TABLE ACCESS FULL DEPT 2 16.02.06 Tietokannan hallinta, kevät 2006, Jan 16

Kustannuslaskentaoptimointi Kustannuslaskentaoptimoinnissa tuotetaan vaihtoehtoisia toteutussuunnitelmia ja lasketaan niille kustannus. Se, jonka kustannus on pienin valitaan. Kaikkia vaihtoehtoja ei lasketa, Esimerkiksi useiden liitosten järjestyksen määräämiseksi käytetään ns. vasensyvää puuta (left deep tree). Tässä liitosrakenne on muotoa. ((A join B) join C) join D... eli valmiiseen liitostulokseen liitetään taulu kerrallaan lokaalia optimointia: mikä liitos kannattaa tehdä ensin, mikä kannattaa liittää, sitten tämän tulokseen, jne. liitosrakenteita muotoa (A join B) join (C join D) ei arvioida. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 17

Kustannuslaskentaoptimointi mahdollisia liitosjärjestyksiä tauluille A,B,C,D join join ei mahdollinen liitosjärjestys tauluille A,B,C,D join D join A join join C join D join join A B C B C B D A vasensyvät puut 16.02.06 Tietokannan hallinta, kevät 2006, Jan 18

Kustannuslaskentaoptimointi Vaikka optimoijalla onkin tiedossa tilastoaineistoa se voi silti päätyä ratkaisuun, joka ei ole välttämättä paras kyseiseen tilanteeseen. Monissa tkhj:ssä käyttäjä pystyy kyselyyn upotettujen vihjeiden avulla vaikuttamaan optimoijan toimintaan, alla Oracle vihje: SELECT /*+ ORDERED USE_NL(customers) */ accounts.balance, customers.last_name, customers.first_name FROM accounts, customers WHERE accounts.custno = customers.custno; Käytä sisäkkäisiä silmukoita, customers sisempänä tauluna. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 19

Oracle: Kyselynkäsittelyarkkitehtuuri 16.02.06 Tietokannan hallinta, kevät 2006, Jan 20

Oracle: kyselynkäsittelijan rakenne 16.02.06 Tietokannan hallinta, kevät 2006, Jan 21

Oracle: tilastollinen optimoija Oraclen kyselyiden optimoijalle voidaan antaa nk. vihjeitä. Optimointitapa annetaan alustustiedostossa ja sitä voidaan vaihtaa ajonaikaisesti. ALTER SESSION SET OPTIMIZER_MODE. Oletusarvoisesti sääntöpohjainen optimoija on paras (näin sanoo ainakin vielä Oracle9i manuaalit). 16.02.06 Tietokannan hallinta, kevät 2006, Jan 22

Edellytykset tilastolliseen optimointiin Jotta tilastollinen optimointi antaisi parhaita mahdollisia tuloksia tulee taulut ja hakemistot ensin analysoida. Tilastollista tietoa voidaan kerätä niin tauluista, sarakkeista, hakemistoista että itse järjestelmästä. Ilman riittävän tuoretta ja tarkkaa tilastollista aineistoa fyysisistä rakenteista ei tilastollinen optimointi tuota tehokkaita kyselyn suoritustapoja. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 23

Kerättävä tilastomateriaali Tauluista kerättävä tilastomateriaali. Rivien lukumäärä taulussa. Fyysisten lohkojen lukumäärä. Keskimääräinen rivinpituus. Sarakkeista kerättävä tilastomateriaali. Kuinka monta eri arvoa sarakkeella on. Kuinka monta tyhjää arvoa sarakkeella on. Tiedon jakautuminen (histogrammi). 16.02.06 Tietokannan hallinta, kevät 2006, Jan 24

Kerättävä tilastomateriaali Hakemistorakenteista kerättävä tilastomateriaali Lehtisolmujen lukumäärä Hakemistorakenteen korkeus (puun korkeus) Ryvästyskerroin Järjestelmästä kerättävä tilastomateriaali I/O:n tehokkuus ja käyttöaste CPU:n tehokkuus ja käyttöaste 16.02.06 Tietokannan hallinta, kevät 2006, Jan 25

Tilastomateriaalin kerääminen Arvioiminen perustuen satunnaisesti valittuun joukkoon datasta. Tarkka laskeminen. Käyttäjän määrittelemä tilastomateriaalin keräystapa. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 26

Optimointitavat FIRST_ROWS(n) FIRST_ROWS ALL_ROWS CHOOSE ROLE 16.02.06 Tietokannan hallinta, kevät 2006, Jan 27

Optimointitapa: FIRST_ROWS(n) Optimoija valitsee tilastollisen optimointitavan riippumatta onko tilastomateriaalia olemassa. Optimoija valitsee parhaan mahdollisen suoritustavan, joka palauttaa ensimmäiset n riviä. Valittavia arvoja on 1 10 100 1000 16.02.06 Tietokannan hallinta, kevät 2006, Jan 28

Optimointitapa: ALL_ROWS Optimoija valitsee tilastollisen optimointitavan riippumatta onko tilastollista materiaalia olemassa. Valitaan se toteutustapa, joka minimoi käytetyt resurssit koko kyselyn suorittamiseksi. Huomioi siis kaikki syöterivit ja tulosrivit. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 29

Optimointitapa: CHOOSE Optimoija valitsee tilastollisen ja sääntöpohjaisen optimoijan välillä. Jos vähintään yhdellä syötetauluista on olemassa tilastollista materiaalia, valitaan tilastollinen optimoija. Jos tilastomateriaali on puutteellista, kyselynkäsittelijä joutuu arvaamaan puuttuvien arvojen arvot ja saattaa muodostaa huonoja arvioita. Tämä on optimoijan oletusarvo. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 30

Optimointitapa: ROLE Optimoija käyttää vain sääntöpohjaista optimointia riippumatta onko tilastomateriaalia olemassa vai eikö. Esimerkkejä: ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS_10; ALTER SESSION SET OPTIMIZER_MODE = ROLE; 16.02.06 Tietokannan hallinta, kevät 2006, Jan 31

Tilastotietojen generointi Tapahtuu Oracle9i versiossa käyttämällä DBMS_STATS pakkausta. GATHER_INDEX_STATS GATHER_TABLE_STATS GATHER_SCHEMA_STATS GATHER_DATABASE_STATS GATHER_SYSTEM_STATS Aikaisemmissa versioissa tapahtuu käyttämällä ANALYZEkomentoa. ANALYZE TABLE X COMPUTE STATISTICS; ANALYZE INDEX X COMPUTE STATISTICS; ANALYZE TABLE X ESTIMATE STATISTICS; 16.02.06 Tietokannan hallinta, kevät 2006, Jan 32

Vihjeiden antaminen SQL*Plus {DELETE INSERT SELECT UPDATE} /*+ hint [text] [hint[text]]... */ tai {DELETE INSERT SELECT UPDATE} + hint [text] [hint[text]]... 16.02.06 Tietokannan hallinta, kevät 2006, Jan 33

Vihjeet 1 FULL(table): The FULL hint explicitly chooses a full table scan for the specified table. ROWID(table): The ROWID hint explicitly chooses a table scan by rowid for the specified table. CLUSTER(table): The CLUSTER hint explicitly chooses a cluster scan to access the specified table. It applies only to clustered objects. HASH(table): The HASH hint explicitly chooses a hash scan to access the specified table. It applies only to tables stored in a cluster. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 34

Vihjeet 2 INDEX(table index): The INDEX hint explicitly chooses an index scan for the specified table. ORDERED: The ORDERED hint causes Oracle to join tables in the order in which they appear in the FROM clause. USE_NL(table, ): The USE_NL hint causes Oracle to join each specified table to another row source with a nested loops join, using the specified table as the inner table. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 35

Vihjeet 3 USE_MERGE(table, ): The USE_MERGE hint causes Oracle to join each specified table with another row source, using a sort merge join. USE_HASH(table, ): The USE_HASH hint causes Oracle to join each specified table with another row source, using a hash join. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 36

Käytännön esimerkki: Tietokanta rengastettujen lintujen seurantaan, koko n 8GB. Yleisimmässä hakutavassa liitetään yhteen kolme taulua: RENGASTUS: tiedot linnusta rengastustapahtumassa, 50 attribuuttia, 3500000 riviä, avain RSTUNNUS,RSTUNNUS2. RENGASTETTU: kaikki käytetyt renkaat, 6 attribuuttia, 6600000 riviä, avain RLNIMIR. TAPAAMINEN: rengastetun linnun uudelleenlöytötiedot, 66 attribuuttia, 785000 riviä, avain TADIARIO. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 37

Tärkeimmät kentät RENGASTUS RSTUNNUS, RSTUNNUS2, avain : renkaiden tunnukset RS_LALYH: lajilyhenne RENGASTETTU RLNIMIR, avain: linnun nimirengas (eli henkilötunnus) TAPAAMINEN TADIARIO, avain TANIMIR: linnun nimirengas TAJALKAR: linnun jalassa nyt oleva rengas TAPVM: tapaamispäivä 16.02.06 Tietokannan hallinta, kevät 2006, Jan 38

Kysely SELECT R.RSTUNNUS nimir,to_char(t.tadiario,'00000000'), T.TANIMIR,TO_CHAR(T.TAPVM,'YYYYMMDD' ) FROM RENGASTUS R, RENGASTETTU RT,TAPAAMINEN T WHERE R.RS_LALYH = STRURA' AND RT.RLUJALKAR BETWEEN R.RSTUNNUS AND R.RSTUNNUS2 AND RT.RLNIMIR = T.TANIMIR ORDER BY T.TANIMIR,T.TAPVM,T.TADIARIO; 16.02.06 Tietokannan hallinta, kevät 2006, Jan 39

ORACLE: oletussuoritus QUERY_PLAN SORT ORDER BY HASH JOIN TABLE ACCESS FULL RENGASTETTU MERGE JOIN CARTESIAN TABLE ACCESS BY ROWID RENGASTUS INDEX RANGE SCAN XSRENGASTUS1 SORT JOIN INDEX FULL SCAN XSTAPAAMINEN11 16.02.06 Tietokannan hallinta, kevät 2006, Jan 40

Analyysi 1 Kyselyn suoritusaika noin 209s Kyselyä ei tosiaankaan kannata suorittaa tuolla tavalla, koska: RS_LALYH on rajaava ehto Voisi käyttää viiteavaimen hakemistoa kentälle RLNIMIR HASH_JOIN, MERGE_JOIN??? Kerrotaanpa optimoijalle hieman lisää tietoa siitä miten kysely tulisi suorittaa. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 41

Kysely2: SELECT /*+ ORDERED FIRST_ROWS USE_NL(R,RT,T) INDEX(R) INDEX(T) INDEX(RT) */ R.RSTUNNUS nimir, TO_CHAR(T.TADIARIO,'00000000'), T.TANIMIR, TO_CHAR(T.TAPVM,'YYYYMMDD') fold_after FROM RENGASTUS R,RENGASTETTU RT,TAPAAMINEN T WHERE R.RS_LALYH = 'STRURA' AND RT.RLUJALKAR BETWEEN R.RSTUNNUS AND R.RSTUNNUS2 AND RT.RLNIMIR = T.TANIMIR ORDER BY T.TANIMIR,T.TAPVM,T.TADIARIO; 16.02.06 Tietokannan hallinta, kevät 2006, Jan 42

Tulos? QUERY_PLAN SORT ORDER BY NESTED LOOPS NESTED LOOPS TABLE ACCESS BY ROWID RENGASTUS INDEX RANGE SCAN XSRENGASTUS1 TABLE ACCESS BY ROWID RENGASTETTU INDEX RANGE SCAN XPRENGASTETTU TABLE ACCESS BY ROWID TAPAAMINEN INDEX RANGE SCAN XSTAPAAMINEN10 16.02.06 Tietokannan hallinta, kevät 2006, Jan 43

Analyysi 2 Kyselyn suoritus vie noin 11s. ORDERED Liitoksessa taulujen järjestys on se mikä annettu kyselyssä FIRST_ROWS Optimoidaan ensimmäisten tulosrivien kustannusta. USE_NL(A,B,..) Liitoksen toteutukseen käytetään sisäkkäisiä silmukoita. 16.02.06 Tietokannan hallinta, kevät 2006, Jan 44