de Optimizer Modes

Oracle Tips van Burleson Consulting

binnen deze twee optimizers biedt Oracle verschillende optimizer-modi. Een optimizer-modus kan worden ingesteld voor de hele database, of het kan worden ingesteld voor een specifieke Oracle-sessie. De optimizer modi omvatten regel, first_rows, all_rows en kies. Laten we eens een kijkje nemen op elk van deze doelen.

regelmodus

de regelhint negeert de CBO en de statistieken en genereert een uitvoeringsplan dat uitsluitend gebaseerd is op de basisgegevens woordenboek-informatie. Het is altijd een goed idee om te proberen een specifieke SQL statement af te stemmen door gebruik te maken van de RBO door gebruik te maken van een regel hint of door de alter session set optimizer_goal=regel uit te geven. Onthoud echter altijd dat het RBO een minder dan ideale index kan kiezen om een query te onderhouden.
Optimizer_mode = choose

met de choose optimizer-modus kan Oracle het meest geschikte optimizer-doel kiezen. Dit is de standaard optimizer-modus binnen Oracle, en het gebruikt over het algemeen de aanwezigheid van statistieken om te bepalen welke optimizer moet worden aangeroepen. Als er geen statistieken bestaan, zal Oracle het regeldoel gebruiken. Als er statistieken bestaan, kiest Oracle first_rows of all_rows, afhankelijk van de aanwezigheid van indexen en de instelling voor parallellisme en db_file_multiblock_read_count.

waarschuwing: het hebben van onvolledige statistieken met de choose optimizer-modus kan enorme vertragingen veroorzaken. Als Oracle een enkele tabel detecteert in een query met statistieken, wordt de kostengebaseerde optimizer gebruikt en worden statistieken berekend voor de andere tabellen tijdens het uitvoeren. Dit kan leiden tot een enorme vertraging van SQL-uitvoering. Dit probleem komt veel voor bij Oracle Remote DBA-beginners omdat de standaardmodus choose is, en omdat beginners Remote DBA ‘ s soms selectief het analysecommando uitgeven, niet realiserend dat ze SQL-uitvoeringstijden uitvoeren.
first_rows mode

dit is een op kosten gebaseerde optimizer-modus die rijen zo snel mogelijk retourneert, zelfs als de Algemene query langer loopt of meer bronnen verbruikt. De first_rows optimizer mode omvat meestal het kiezen van een full-index scan over een parallelle full-table scan. Omdat de first_rows mode voorkeur index scans over full-table scans, de first_rows mode is het meest geschikt voor online systemen waar de eindgebruiker wil sommige resultaten zo snel mogelijk te zien.
all_rows mode

dit is een op kosten gebaseerde optimizer-modus die ervoor zorgt dat de totale query-tijd wordt geminimaliseerd, zelfs als het langer duurt om de eerste rij te ontvangen. Dit houdt meestal het kiezen van een parallelle full-table scan over een full-index scan. Omdat de all_rows-modus de voorkeur geeft aan full-table scans, is de all_rows-modus het meest geschikt voor batch-georiënteerde query ‘ s waarbij tussenliggende rijen niet nodig zijn voor het bekijken.
Wat is “beter”? Snelle uitvoering vs. minimaal gebruik van bronnen.

om de filosofie van Oracle met betrekking tot snelle uitvoering en minimaal gebruik van hulpbronnen te begrijpen, moeten we naar een eenvoudig voorbeeld kijken. Om het verschil tussen all_rows en first_rows met een te simplistisch voorbeeld te illustreren, kunt u de volgende query bekijken:

select
last_name
from
customer
order by
last_name;

deze query kan op twee manieren worden onderhouden:

  • Full-table scan – hier voeren we een full-table scan parallel uit en sorteren de rijen in de TEMP tablespace. Ter illustratie, laten we aannemen dat dit uitvoeringsplan de snelste totale uitvoeringstijd en minimaal gebruik van middelen produceert (Figuur 2).

Figuur 2: Voer een full-table scan en een sort (all_rows)

  • volledige Indexscan-hier halen we de rijen op in last_name volgorde met behulp van een last_name_index. Deze techniek resulteert in meer fysieke leest, maar begint gesorteerde rijen vrijwel onmiddellijk terug te keren (Figuur 3).

Figuur 3: Voer een index retrieval (first_rows)

opnieuw uit, ervan uitgaande dat we de full-table scan accepteren en sorteren Minder I/O intensief is dan de full-index scan, dan kunnen we duidelijk het verschil zien in de optimizer doelen. De full-index scan zal beginnen om rijen te retourneren bijna onmiddellijk ten koste van extra I / O, terwijl de full-table scan zal minder middelen nodig hebben, maar de result set zal niet beschikbaar zijn tot het einde van de query.

Dit is een uittreksel uit “Oracle High-Performance SQL Tuning” door Donald K. Burleson, uitgegeven door Oracle Press.

Write a Comment

Het e-mailadres wordt niet gepubliceerd.