Oracle Tippek a Burleson Consulting-tól |
e két optimalizálón belül az Oracle számos optimalizáló módot kínál. Az optimalizáló mód beállítható a teljes adatbázishoz, vagy beállítható egy adott Oracle munkamenethez. Az optimalizáló módok közé szabály, first_rows, all_rows és válassza. Nézzük meg közelebbről ezeket a célokat.
szabály mód
a szabály tipp figyelmen kívül hagyja a CBO-t és a statisztikákat, és létrehoz egy végrehajtási tervet, amely kizárólag az alapvető adatszótár információin alapul. Ez mindig egy jó ötlet, hogy megpróbálja tuning egy adott SQL utasítás segítségével az RBO segítségével egy szabály hint vagy kiadásával az alter session set optimizer_goal=szabály. Ne feledje azonban, hogy az RBO az ideálisnál kevesebb indexet választhat a lekérdezés kiszolgálásához.
Optimizer_mode=choose
a choose optimizer mód lehetővé teszi az Oracle számára, hogy kiválassza a legmegfelelőbb optimalizálási célt. Ez az alapértelmezett optimalizáló mód Az Oracle-en belül, és általában a statisztikák jelenlétét használja annak meghatározására, hogy melyik optimalizálót hívja meg. Ha nincs statisztika, az Oracle a szabálycélt fogja használni. Ha vannak statisztikák, az Oracle a first_rows vagy az all_rows lehetőséget választja, az indexek jelenlététől, valamint a párhuzamosság és a db_file_multiblock_read_count beállításától függően.
figyelem: a Select optimizer mód hiányos statisztikája hatalmas lassulást okozhat. Ha az Oracle egyetlen táblázatot észlel egy lekérdezésben statisztikákkal, akkor a költségalapú optimalizálót fogja használni, és futásidőben kiszámítja a többi tábla statisztikáit. Ez az SQL végrehajtásának hatalmas lassulását okozhatja. Ez a probléma nagyon gyakori az Oracle Remote DBA kezdőknél, mert az alapértelmezett mód a választás, és mivel a kezdő távoli DBA-k néha szelektíven adják ki az analyz parancsot, nem veszik észre, hogy az SQL végrehajtási idejét hajtják végre.
first_rows mód
ez egy költségalapú optimalizáló mód, amely a lehető leghamarabb visszaadja a sorokat, még akkor is, ha az Általános lekérdezés hosszabb ideig fut, vagy több erőforrást igényel. A first_rows optimizer mód általában magában foglalja a teljes index beolvasását egy párhuzamos teljes táblázatos vizsgálat helyett. Mivel a first_rows mód az indexvizsgálatokat részesíti előnyben a teljes táblázatos vizsgálatokkal szemben, a first_rows mód a legmegfelelőbb az online rendszerekhez, ahol a végső felhasználó a lehető leggyorsabban szeretné látni az eredményeket.
all_rows mód
ez egy költségalapú optimalizáló mód, amely biztosítja a teljes lekérdezési idő minimalizálását, még akkor is, ha az első sor fogadása hosszabb ideig tart. Ez általában magában foglalja a párhuzamos teljes táblázatos vizsgálat kiválasztását a teljes indexű vizsgálat helyett. Mivel az all_rows mód a teljes táblázatos vizsgálatokat részesíti előnyben, az all_rows mód a legalkalmasabb kötegelt orientált lekérdezésekhez, ahol a megtekintéshez nincs szükség köztes sorokra.
melyik a “jobb”? Gyors végrehajtás vs. minimális erőforrás-felhasználás.
ahhoz, hogy megértsük az Oracle filozófiáját a gyors végrehajtásról és a minimális erőforrás-felhasználásról, meg kell vizsgálnunk egy egyszerű példát. Az all_rows és a first_rows közötti különbség túl egyszerű példával történő szemléltetéséhez vegye figyelembe a következő lekérdezést:
válassza a
last_name
lehetőséget
ügyfél
rendelés
last_name;
ez a lekérdezés kétféle módon javítható:
-
Full-table scan-itt egy full-table scan-t hajtunk végre párhuzamosan, és rendezzük a sorokat a TEMP tablespace-ben. Az illusztráció kedvéért tegyük fel, hogy ez a végrehajtási terv a leggyorsabb teljes végrehajtási időt és az erőforrások minimális felhasználását eredményezi (2.ábra).
2. ábra: teljes táblázatos beolvasás és rendezés (all_rows)
-
teljes Index scan – itt letölteni a sorokat last_name sorrendben segítségével last_name_index. Ez a technika több fizikai olvasást eredményez, de szinte azonnal visszatér a rendezett sorokba (3.ábra).
3. ábra: Végezzen el egy index visszakeresést (first_rows)
ismét, feltételezve, hogy elfogadjuk a teljes táblázatos vizsgálatot, és a rendezés kevésbé I/O intenzív, mint a teljes indexes vizsgálat, akkor világosan láthatjuk az optimalizáló céljainak különbségét. A teljes indexű vizsgálat szinte azonnal megkezdi a sorok visszatérését az extra I / O rovására, míg a teljes táblázatos vizsgálat kevesebb erőforrást igényel, de az eredménykészlet a lekérdezés végéig nem lesz elérhető.
ez egy részlet Donald K. Burleson “Oracle High-Performance SQL Tuning” – ból, amelyet az Oracle Press adott ki.