Kezdőlap     AB2ea     AB2gyak (főmenü)     7.gyak      9.gyak 

8.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 (tipp-lista) segítségével
> C3. További módszerek végrehajtási tervek megváltoztatására (nincs zh-án)
P (papíros feladatok)
-- 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.
    

A gyakorlati foglalkozások az előadások anyagára épülnek
7.EA: Az Oracle költségalapú és szabályalapú optimalizálása (folytatás)
lekérdezésterveinek megjelenítése és értelmezése,  trace állományok, hintek,
statisztikák létrehozása, analyze utasítás, hisztogrammok 9ituning.ppt (végéig)
   
-- előadáshoz kapcsolódó további olvasmány:
Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása, Panem, 2001.
7.5.-7.7. Bevezetés a költség alapú tervválasztásba, statisztikák
   

C2. 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 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. C1. Végrehajtási tervek 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=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
(Ez nem szerepel a gyakorlati számonkérésben, csak kiegészítés, nem lesz zh-n)
    
Segédanyagok:
>> Kiss Attila Adatbázisok-2 előadása  9ituning 77-78.o: Analyze 
>> 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)
            
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: lásd az előadás anyagát, lásd NT_Tetel9_kidolgozott.pdf
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