režimy Optimalizátoru

Oracle tipy od Burleson Consulting

v rámci těchto dvou optimalizátorů poskytuje Oracle několik režimů optimalizátoru. Režim optimalizátoru může být nastaven pro celou databázi nebo může být nastaven pro konkrétní relaci Oracle. Režimy optimalizátoru zahrnují pravidlo, first_rows, all_rows a choose. Podívejme se blíže na každý z těchto cílů.

režim pravidla

Nápověda pravidla ignoruje CBO a statistiky a vygeneruje plán provádění pouze na základě základních informací o slovníku dat. Vždy je dobré vyzkoušet vyladění konkrétního příkazu SQL pomocí RBO pomocí nápovědy pravidel nebo vydáním sady alter session optimizer_goal = rule. Vždy však pamatujte, že RBO může zvolit méně než ideální index pro servis dotazu.
Optimizer_mode=vybrat

režim zvolit optimalizátor umožňuje Oracle zvolit nejvhodnější cíl optimalizátoru. Toto je výchozí režim optimalizátoru v rámci Oracle a obecně používá přítomnost statistik k určení, který optimalizátor vyvolat. Pokud neexistují žádné statistiky, Oracle použije cíl pravidla. Pokud existují statistiky, Oracle vybere first_rows nebo all_rows, v závislosti na přítomnosti indexů a nastavení pro paralelismus a db_file_multiblock_read_count.

upozornění: neúplné statistiky s režimem zvolit optimalizátor mohou způsobit obrovské zpomalení. Pokud Oracle detekuje jednu tabulku v dotazu se statistikami, použije optimalizátor založený na nákladech a vypočítá statistiky pro ostatní tabulky za běhu. To může způsobit obrovské zpomalení provádění SQL. Tento problém je velmi častý u začátečníků Oracle Remote DBA, protože výchozí režim je vybrat, a protože začátečník vzdálené DBA někdy selektivně vydá příkaz analyzovat, aniž by si uvědomil,že ovlivňují časy provádění SQL.
režim first_rows

Jedná se o optimalizační režim založený na nákladech, který vrátí řádky co nejdříve, i když celkový dotaz běží déle nebo spotřebovává více zdrojů. Režim first_rows optimizer obvykle zahrnuje výběr skenování s plným indexem přes paralelní skenování s plným stolem. Protože režim first_rows upřednostňuje skenování indexů před skenováním v plném stole, režim first_rows je nejvhodnější pro online systémy, kde koncový uživatel chce vidět některé výsledky co nejrychleji.
režim all_rows

Jedná se o optimalizační režim založený na nákladech, který zajišťuje minimalizaci celkového času dotazu, i když příjem prvního řádku trvá déle. To obvykle zahrnuje výběr paralelního skenování s plným stolem nad skenováním s plným indexem. Protože režim all_rows upřednostňuje skenování celé tabulky, režim all_rows je nejvhodnější pro dávkově orientované dotazy, kde pro prohlížení nejsou vyžadovány mezilehlé řádky.
co je „lepší“? Rychlé provedení vs. minimální využití zdrojů.

abychom pochopili filozofii společnosti Oracle týkající se rychlého provedení a minimální spotřeby zdrojů, musíme se podívat na jednoduchý příklad. Pro ilustraci rozdílu mezi all_rows a first_rows s příliš zjednodušujícím příkladem zvažte následující dotaz:

vyberte
last_name
z
zákazník
objednejte
last_name;

tento dotaz lze obsluhovat dvěma způsoby:

  • Full-table scan – zde provádíme skenování full-table paralelně a řadíme řádky v TEMP tablespace. Pro ilustraci předpokládejme, že tento plán provádění vytváří nejrychlejší celkovou dobu provádění a minimální využití zdrojů (Obrázek 2).

Obrázek 2: proveďte skenování celé tabulky a třídění (all_rows)

  • Full Index scan – zde načteme řádky v pořadí last_name pomocí last_name_index. Tato technika má za následek více fyzických čtení, ale začne se téměř okamžitě vracet seřazené řádky (obrázek 3).

obrázek 3: Znovu proveďte vyhledávání indexu (first_rows)

za předpokladu, že přijmeme skenování v plné tabulce a třídění je méně náročné na I/O než skenování v plném indexu, pak můžeme jasně vidět rozdíl v cílech optimalizátoru. Skenování s plným indexem začne vracet řádky téměř okamžitě na úkor extra I/ O, zatímco skenování s plným stolem bude vyžadovat méně zdrojů, ale sada výsledků nebude k dispozici až do konce dotazu.

Toto je výňatek z „Oracle High-Performance SQL Tuning“ od Donalda k. Burlesona, publikovaného společností Oracle Press.

Write a Comment

Vaše e-mailová adresa nebude zveřejněna.