Oracle Tips af Burleson Consulting |
inden for disse to optimatorer leverer Oracle flere optimeringstilstande. En optimeringstilstand kan indstilles for hele databasen, eller den kan indstilles til en bestemt Oracle-session. Optimeringstilstandene omfatter regel, first_rækker, all_rækker og vælg. Lad os se nærmere på hvert af disse mål.
Regeltilstand
regeltipset ignorerer CBO og statistikken og genererer en eksekveringsplan, der udelukkende er baseret på de grundlæggende dataordbogsoplysninger. Det er altid en god ide at prøve at indstille en bestemt sætning ved at bruge RBO ved hjælp af et regeltip eller ved at udstede alter session set optimiser_goal=rule. Husk dog altid, at RBO muligvis vælger et mindre end ideelt indeks til at servicere en forespørgsel.
Optimering_mode=vælg
vælg optimeringstilstand gør det muligt for Oracle at vælge det mest passende optimeringsmål. Dette er standardoptimeringstilstand inden for Oracle, og det bruger generelt tilstedeværelsen af statistik til at bestemme, hvilken optimering der skal påberåbes. Hvis der ikke findes nogen statistik, bruger Oracle regelmålet. Hvis der findes statistik, vil Oracle vælge first_rækker eller all_rækker, afhængigt af tilstedeværelsen af indekser og indstillingen for parallelisme og db_file_multiblock_read_count.
advarsel: at have ufuldstændige statistikker med Vælg optimeringstilstand kan forårsage enorme afmatninger. Hvis Oracle registrerer en enkelt tabel i en forespørgsel med statistik, bruger den den omkostningsbaserede optimering og beregner statistik for de andre tabeller på kørselstid. Dette kan medføre en enorm afmatning af udførelsen af KVL. Dette problem er meget almindeligt med Oracle Remote DBA-begyndere, fordi standardtilstanden er Vælg, og fordi begynder Remote DBA ‘ er undertiden selektivt udsteder analysekommandoen uden at indse, at de udfører EKSEKVERINGSTIDER.
førstegangstilstand
dette er en omkostningsbaseret optimeringstilstand, der returnerer rækker så hurtigt som muligt, selvom den samlede forespørgsel kører længere eller bruger flere ressourcer. Førstegangsoptimeringstilstand involverer normalt at vælge en scanning med fuld indeks over en parallel scanning med fuld tabel. Da førstegangsfunktionen favoriserer indeksscanninger frem for scanninger i fuld tabel, er førstegangsfunktionen mest passende til online-systemer, hvor slutbrugeren ønsker at se nogle resultater så hurtigt som muligt.
all_veks-tilstand
dette er en omkostningsbaseret optimeringstilstand, der sikrer, at den samlede forespørgselstid minimeres, selvom det tager længere tid at modtage den første række. Dette indebærer normalt at vælge en parallel scanning i fuld tabel over en scanning i fuld indeks. Fordi tilstanden all_rækker favoriserer scanninger i fuld tabel, er tilstanden all_rækker bedst egnet til batchorienterede forespørgsler, hvor mellemliggende rækker ikke er nødvendige for visning.
Hvad er “bedre”? Hurtig udførelse vs. minimal ressourceforbrug.
for at forstå Oracles filosofi om hurtig udførelse og minimalt ressourceforbrug skal vi se på et simpelt eksempel. For at illustrere forskellen mellem all_veks og first_veks med et overforenklet eksempel skal du overveje følgende forespørgsel:
vælg
last_name
fra
kunde
Bestil efter
last_name;
denne forespørgsel kan serviceres på to måder:
-
fuldtabelscanning-her udfører vi en fuldtabelscanning parallelt og sorterer rækkerne i TEMP tablespace. Af hensyn til illustrationen, lad os antage, at denne eksekveringsplan producerer den hurtigste samlede eksekveringstid og minimal brug af ressourcer (figur 2).
figur 2: Udfør en fuldtabelscanning og en sortering (alle rækker)
-
fuld Indeksscanning-her henter vi rækkerne i last_name-rækkefølge ved hjælp af et last_name_indeks. Denne teknik resulterer i mere fysiske læsninger, men begynder at returnere sorterede rækker næsten øjeblikkeligt (figur 3).
figur 3: Udfør en indekshentning
igen, forudsat at vi accepterer fuldtabelscanning og sortering er mindre i/O-intensiv end fuldindeks-scanningen, så kan vi tydeligt se forskellen i optimeringsmålene. Fuldindeks scanningen begynder at returnere rækker næsten øjeblikkeligt på bekostning af ekstra I/O, mens fuldtabelscanningen kræver mindre ressourcer, men resultatsættet vil ikke være tilgængeligt før slutningen af forespørgslen.
dette er et uddrag fra “Oracle High-Performance Tuning” af Donald K. Burleson, udgivet af Oracle Press.