AB2gyak (főmenü)    Gyak.köv.    AB2ea    8.gyak     10.gyak    OracleDoc

9.gyak. Bevezetés a költség alapú tervválasztásba II.
Végrehajtási tervek 
megváltoztatása
   
C (gépes feladatok)
-- ism: C1. Gépes feladatok az Oracle-ben végrehajtási tervek előállítására
> C2. Végrehajtási tervek megváltoztatása hintek segítségével
> C3. További módszerek végrehajtási tervek megváltoztatására
   
P (papíros feladatok)
-- ism. P1. Lekérdezések végrehajtása (I/O költségek) Tk.2.3. és 6.2.-6.9. 
-- ism: P2. Lekérdezések feldolgozása, algebrai optimalizálás Tk.7.1.-7.3.
> P3. Költség alapú optimalizálás, output méretének becslése  Tk.7.4.-7.7.
   

C2. Végrehajtási tervek megváltoztatása hintek segítségével
    

A zh és beküldendő feladatoknál egy szöveges állományba bemásolva beküldendő: 
   1.) SELECT  /*+ tipp lista */ ...  vagyis a lekérdezés (hintekkel együtt),
   2.) lekérdezés outputja ("SCIPT OUTPUT"-ból az eredménytábla első 5 sorát), 
   3.) végrehajtási tervek szöveges megjelenítése  ("EXPLAIN PLAN OUTPUT"-ból)
        -- Ehhez az 1.lépés: Készítsük el az utasítások végrehajtási tervét:
            EXPLAIN PLAN FOR SELECT ... 
        -- 2.lépés: A végrehajtási tervek megjelenítése a dbms_xplan package segítségével: 
           SELECT plan_table_output FROM table(dbms_xplan.display);
_______________________________________________________________
Segédanyagok:
- Oracle 11g Doc. Performance Tuning Guide HTML   PDF  és itt 11-21.fejezetek,
   lásd 19. Hintek használata: 19. Using Optimizer Hints  >> hintek.txt (Nikovits T.)
- Kiss Attila Adatbázisok-2 előadása, lásd 7.előadás 9ituning 75-76.o: Hints.pdf
- Tuning.ppt
_______________________________________________________________
2.1.feladat: 
Lekérdezések és végrehajtási tervek megváltoztatása hintek segítségével
NIKOVITS.CIKK, SZALLITO, PROJEKT, SZALLIT táblái alapján
   
- A lekérdezésekhez NIKOVITS felhasználó tulajdonában levő táblákat használjuk: 
  CIKK(ckod, cnev, szin, suly)
  SZALLITO(szkod, sznev, statusz, telephely)
  PROJEKT(pkod, pnev, helyszin)
  SZALLIT(szkod, ckod, pkod, mennyiseg, datum)
 
- Vagyis most ne hozzunk létre saját példányokat, hanem egy adott séma tábláit
   használjuk a lekérdezéseknél, a táblák elérése: NIKOVITS.<táblanév>
- A táblákhoz különböző indexek is vannak létrehozva, ezek tulajdonságait
   a katalógusokból (dba_indexes) nézhetjük meg, amikor szükségünk van rá.
 
NIKOVITS felhasználó tulajdonában levő táblákra adjuk meg a következő
   lekérdezéseket és a hozzá tartozó végrehajtási tervet  (mentsük le szövegfájlba).
   Minden esetben lehet hinteket használni. Lásd hintek.txt (Nikovits T.összefoglalója)
 
- Adjuk meg a piros cikkekre vonatkozó szállitások összmennyiségét.
   a) Adjuk meg úgy a lekérdezést, hogy egyik táblára se használjon indexet az oracle.
   b) Adjuk meg úgy a lekérdezést, hogy csak az egyik táblára használjon indexet az oracle.
   c) Adjuk meg úgy a lekérdezést, hogy mindkét táblára használjon indexet az oracle.
   d) Adjuk meg úgy a lekérdezést, hogy a két táblát SORT-MERGE módszerrel kapcsolja össze.
   e) Adjuk meg úgy a lekérdezést, hogy a két táblát NESTED-LOOPS módszerrel kapcsolja össze.
   f) Adjuk meg úgy a lekérdezést, hogy a két táblát NESTED-LOOPS módszerrel kapcsolja össze,
      és ne használjon indexet.
 
2.2.feladat:
- Adjuk meg a Pecs-i telephelyű szállítók által szállított piros cikkek összmennyiségét.
   a) Adjuk meg úgy a lekérdezést, hogy a szallit táblát először a cikk táblával join-olja az oracle.
   b) Adjuk meg úgy a lekérdezést, hogy a szallit táblát először a szallito táblával join-olja az oracle.
   
2.3.feladat:
- Adjuk meg azon szállítások összmennyiségét, ahol ckod=2 és szkod=2.
   a) Adjuk meg úgy a lekérdezést, hogy ne használjon indexet.
   b) A végrehajtási tervben két indexet használjon, és képezze a sorazonosítók metszetét
       (AND-EQUAL).
   c) A végrehajtási tervben két indexet használjon, és képezze a kapott sorok unióját
       (CONCATENATION).
 
- Lásd még a tervek2.txt és a tervek3.txt feladatait!
          
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára  
    

C3. További módszerek végrehajtási tervek megváltoztatása statisztikák kezelésével
    
Segédanyagok: 
- Oracle 11g Doc. Performance Tuning Guide HTML   PDF  és itt 11-21.fejezetek,
   lásd 13. fejezet: Statisztikák kezelése: 13. Managing Optimizer Statistics 
- Kiss Attila Adatbázisok-2 előadása, lásd 7.előadás 9ituning 77-78.o: Analyze.pdf
Exec_Plans_Stats.ppt
   
Előkészítésként nézzünk meg két papíron megoldandó feladatot a statisztikákról:
Tankönyv 7.5. szakasz - Statisztikák kiszámítása (Papíron oldjuk meg!)
3.1.feladat:   
 - Hozzunk létre 5 intervallumos magasság alapú hisztogramot az alábbi eloszlású
   adatokra vonatkozóan, vagyis adjuk meg az egyes intervallumok végpontjait.
   1-100 (3), 101-300 (2), 301-500 (1), 501-600 (3)
   (Az előfordulások száma zárójelben szerepel, pl. 1-100 (3) azt jelenti, hogy
   1 és 100 között minden érték háromszor fordul elő, vagyis 1 és 100 között
   300 előfordulás van. Ezek szerint a táblának összesen hány sora is van?) 
 
3.2.feladat:
- Hozzunk létre 5 intervallumos szélesség (gyakoriság) alapú hisztogramot is
  ugyanezekre az adatokra: 1-100 (3), 101-300 (2), 301-500 (1), 501-600 (3)
            
Ezután nézzük meg gépnél az Oracle megoldásait (ez nem szerepel a zárthelyi dolgozatban)
3.3.feladat:
   - Hozzunk létre egy saját példányt a nikovits.szallit táblából és indexet a datum oszlopra,
     majd adjunk meg egy olyan lekérdezést, amelyik egy általunk választott napra vonatkozóan
     a szállítások összmennyiségét adja meg. Statisztikák létrehozásával illetve törlésével
     (lásd tervek3.txt) érjük el (hintek használata nélkül), hogy az Oracle egyszer használjon
     indexet, máskor pedig (hisztogram létrehozása vagy törlése után) ne használjon indexet.
   
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára  
    
P3. Költség alapú optimalizálás, output méretének becslése
 
Segédanyagok: - Nikovits Tibor (Kiss Attila kézirata alapján) Tetel9_kidolgozott.pdf
- Kiss Attila Adatbázisok-2 előadása, lásd 7.előadás QueryProcessingWithSemijoin-hu.ppt
Tankönyv: Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása, Panem, 2001.
7.4-7-7. szakasz - Költség alapú optimalizálás 7_4_outputmeret_becsles.pdf
 
Feladatok: (Papíron oldjuk meg!)
P3.1.feladat: (lásd 7.4.4. Összekapcsolás méretének becslése, 7.25. példa)  
- Vegyük az R(a, b), S(b, c) és U(c, d) relációkat, ahol az T(R)=1000, T(S)=2000,
   T(U)=5000 (ennyi sora van), továbbá V(R,a)=100, V(R,b)=20, V(S,b)=200 és
   V(S,c)=500, V(U,c)=100 és V(U,d)=400 (a reláció attribútumának ennyi
   értéke van, R-nek 1000 sora van és R.a-nak 100 különböző értéke, stb).
   Adjuk meg a legjobb becslés az (R(a, b) join S(b, c) join U(c, d)) méretére!
   
P3.2.feladat: (lásd 7.4.3. Kiválasztás méretének becslése, 7.24. példa)
- Adjuk meg a legjobb becslést szigmaa=1 (R(a, b) join S(b, c) join U(c, d))-ra is!
   
P3.3.feladat: (lásd 7.4.5. Term.összekapcs. több összekapcs.attribútummal, 7.28. példa)   
- Vegyük az R(a, b, c), S(b, c, d) és U(b, e) relációkat, ahol az T(R)=1000, T(S)=2000,
   T(U)=5000 (ennyi sora van), továbbá V(R,a)=100, V(R,b)=20, V(R,c)=200, V(S,b)=50,
   V(S,c)=100, V(S,d)=400, V(U,b)=200 és V(U,e)=500 (a reláció attribútumának
   ennyi értéke van, R-nek 1000 sora van és R.a-nak 100 különböző értéke, stb).
   Adjuk meg a legjobb becslés az (R(a, b, c) join S(b, c, d) join U(b, e)) méretére!
   
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára