8.gyak. Bevezetés a költség alapú tervválasztásba II.
Végrehajtási tervek 
megváltoztatására 
   
>> 12.témakör: Végrehajtási tervek megváltoztatása hintek segítségével
>> 13.témakör: Végrehajtási tervek megváltoztatása statisztikák kezelésével
>> + Az előadás anyagához kapcsolódó papíros feladatok (külön oldalon)
    

A gyakorlati foglalkozás és az előadások anyagára épül.
8.EA: Oracle lekérdezések végrehajtási tervei 9ituning-hu.ppt (KA)
-- a fenti bemutató Oracle 9i példáit a gyakorlaton Oracle 11g-ben nézzük meg!
-- Oracle 11g Doc. Performance Tuning Guide HTML   PDF 
    itt 11-21.fejezetek, az áttekintést lásd 11. The Query Optimizer  
     
Az előadás anyagához kapcsolódó példák és feladatok: 
-- Az 6-8. előadáshoz (6-10.vizsgakérdésekhez) kapcsolódó további olvasmány:
Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása, Panem, 2001.
>> Tk.6.fej. Lekérdezések végrehajtása, műveletek I/O költsége
>> Tk.7.2-7.3. Heurisztikus szabályokon alapú algebrai optimalizálás
>> Tk.7.4-7.7. Költség alapú optimalizálás, statisztikák   
     

12.témakör: Végrehajtási tervek megváltoztatása
hintek (tipp-lista) segítségével

    

Segédanyagok:
>> Kiss Attila Adatbázisok-2 előadása 9ituning 75-76.o: Hints
>> Oracle 10g Doc. Performance Tuning Guide HTML   PDF  és itt 13-19.fejezetek,
      lásd 16. fejezet: Hintek használata:  16. Using Optimizer Hints   [hintsref.htm]
>> Oracle 11g Doc. Performance Tuning Guide HTML   PDF  és itt 11-21.fejezetek,
      lásd 19. fejezet: Hintek használata:  19. Using Optimizer Hints  
>> Nikovits Tibor:  hintek.txt  és tervek2.txt
_______________________________________________________________
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);
_______________________________________________________________
2.1.feladat: -- 7.gyak. 2.feladatának a folytatása
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 
 
- 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=1 é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).
   
2.4.feladat:
- Adjuk meg azon szállítások összmennyiségét, ahol ckod=1 vagy 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 kapott sorok unióját
       (CONCATENATION).
 
- Lásd még a tervek2.txt és a tervek3.txt feladatait!
     

13.témakör: Végrehajtási tervek megváltoztatása
statisztikák létrehozásával és törlésével

   
Segédanyagok:
>> Kiss Attila Adatbázisok-2 előadása  9ituning 77-78.o: Analyze 
>> Oracle 10g Doc. Performance Tuning Guide HTML   PDF  és itt 13-19. fejezetek,
      lásd 14. fejezet: Statisztikák kezelése: 14. Managing Optimizer Statistics  [stats.htm]
>> 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 
>> Nikovits Tibor:  tervek3.txt
   
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)
>> Tk.7.4-7.7. Költség alapú optimalizálás, statisztikák   
   
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.
   

Beadandó feladat - 8gyak.
Kérem, hogy a gyakorlatok lekérdezéseit és azok végrehajtási terveit (vagyis az
"EXPLAIN PLAN OUTPUT"-ot, ahogy az Oracle doksikban van a példáknál, mint itt)
mentsék el egy "<ehakod>_8gy.txt" nevű szöveges fájlba, ahol az <ehakod> helyére
a saját ETR azonosítóját .ELTE nélkül írja be. Ezt a .txt fájlt az óra végén vagy
legkésőbb a 9.gyakorlatot közvetlenül megelőző szerda éjfélig küldjék el e-mailben.
A beadandó célja az önálló gyakorlás, lásd Gyakorlati követelmények #Beadandó
        
 Vissza az AB2 gyakorlat oldalára             Vissza a Kezdőlapra