The Optimizer Modes

Burleson Consultingin Oracle-vinkit

näiden kahden optimizers, Oracle tarjoaa useita optimizer tilat. Optimizer-tila voidaan asettaa koko tietokannalle tai se voidaan asettaa tietylle Oracle-istunnolle. Optimizer tilat ovat sääntö, first_rows, all_rows ja valitse. Tarkastellaan lähemmin kutakin näistä tavoitteista.

Sääntötila

sääntövihje jättää CBO: n ja tilastot huomiotta ja luo toteutussuunnitelman, joka perustuu yksinomaan perusaineiston sanakirjan tietoihin. Se on aina hyvä idea kokeilla tuning tietyn SQL lauseke käyttämällä RBO käyttämällä sääntö vihje tai antamalla alter session set optimizer_goal=sääntö. Muista kuitenkin aina, että RBO voi valita vähemmän kuin ihanteellinen indeksi palvelemaan kyselyn.
Optimizer_mode=choose

choose optimizer-tilassa Oracle voi valita sopivimman optimizer-tavoitteen. Tämä on oletuksena optimizer tilassa Oracle, ja se yleensä käyttää läsnäolo tilastoja määrittää, mikä optimizer vedota. Jos tilastoja ei ole, Oracle käyttää sääntömaalia. Jos tilastot ovat olemassa, Oracle valitsee first_rows tai all_rows, riippuen indeksien läsnäolosta ja parallelism and db_file_multiblock_read_count-asetuksesta.

Varoitus: puutteellinen tilastointi choose optimizer-moodilla voi aiheuttaa valtavia hidastuksia. Jos Oracle havaitsee kyselyssä yhden taulukon, jossa on tilastoja, se käyttää kustannusperusteista optimizeria ja laskee muiden taulukoiden tilastot suorituksen aikana. Tämä voi aiheuttaa valtava hidastuminen SQL suoritus. Tämä ongelma on hyvin yleinen Oracle kauko DBA aloittelijoille, koska oletustila on valita, ja koska aloittelija kauko DBAs joskus valikoivasti antaa analysoida komento, tajuamatta, että ne vaikuttavat SQL suoritusajat.
first_rows-tila

tämä on kustannusperusteinen optimointitila, joka palauttaa rivit mahdollisimman pian, vaikka kokonaiskysely kestäisi pidempään tai kuluttaisi enemmän resursseja. First_rows optimizer mode liittyy yleensä valitsemalla täyden indeksin skannaus yli rinnakkaisen täyden taulukon skannaus. Koska first_rows-tila suosii indeksiskannauksia koko taulukon skannausten sijaan, first_rows-tila sopii parhaiten online-järjestelmiin, joissa loppukäyttäjä haluaa nähdä joitakin tuloksia mahdollisimman nopeasti.
all_rows-tila

tämä on kustannusperusteinen optimointitila, joka varmistaa, että kyselyaika on mahdollisimman pieni, vaikka ensimmäisen rivin vastaanottaminen kestäisikin kauemmin. Tämä edellyttää yleensä valitsemalla rinnakkainen koko taulukon skannauksen yli täyden indeksin skannaus. Koska all_rows-tila suosii koko taulukon skannauksia, all_rows-tila soveltuu parhaiten eräkohtaisiin kyselyihin, joissa välirivejä ei tarvita katseluun.
kumpi on ”parempi”? Nopea suoritus vs. Vähäinen resurssien käyttö.

ymmärtääksemme Oraclen filosofiaa nopeasta toteutuksesta ja vähäisestä resurssien kulutuksesta meidän on tarkasteltava yksinkertaista esimerkkiä. Jos haluat havainnollistaa all_rows-ja first_rows-arvojen eroa liian yksinkertaistetulla esimerkillä, harkitse seuraavaa kyselyä:

valitse
last_nimi
asiakkaalta
tilaus
last_nimi;

tätä kyselyä voidaan huoltaa kahdella tavalla:

  • Full-table scan – tässä teemme täyden pöydän skannauksen rinnakkain ja lajittelemme rivit TEMP-taulukoissa. Otaksukaamme, että tämä toteutussuunnitelma tuottaa nopeimman kokonaissuoritusajan ja vähäisen resurssien käytön (kuva 2).

kuva 2: Suorita koko taulukon skannaus ja lajittelu (all_rows)

  • täysi Indeksiskannaus – täältä haemme rivit last_name-järjestyksessä käyttämällä last_name_indexiä. Tämä tekniikka johtaa fyysisempiin lukemiin, mutta alkaa palauttaa lajiteltuja rivejä lähes välittömästi (Kuva 3).

kuva 3: Suorita indeksihaku (first_rows)

uudelleen, olettaen, että hyväksymme täyden taulukon skannauksen ja lajittelu on vähemmän I/O-intensiivistä kuin täyden indeksin skannaus, voimme selvästi nähdä eron optimoijan tavoitteissa. Täyden indeksin skannaus alkaa palauttaa rivejä lähes välittömästi ylimääräisen I/O: n kustannuksella, kun taas täyden taulukon skannaus vaatii vähemmän resursseja, mutta tulosjoukko on käytettävissä vasta kyselyn lopussa.

tämä on ote Donald K. Burlesonin teoksesta ”Oracle High-Performance SQL Tuning”, jonka on julkaissut Oracle Press.

Write a Comment

Sähköpostiosoitettasi ei julkaista.