V. Témakör: Optimalizálás. Hangolás.

_______________________________________________________
4. gyak. (X.04)
 - Lekérdezések optimalizálása


_______________________________________________________
5. gyak. (X.11)
 - Költségbecslések


_______________________________________________________
6. gyak. (X.18)
 - Végrehajtási tervek + hint


Segédanyagok:
- Kiss Attila előadásaihoz kapcsolódó anyag: az előadó honlapján
- Oracle Database Online Documentation Library 10g könyvtárban  
       Administration felsőmenü alatt az "Performance" részben
       Performance Tuning Guide   HTML   PDF
       Part IV. Optimazing SQL Statements

Feladatok a lekérdezések optimalizálására

Algebrai optimalizálás (heurisztikán alapuló optimalizálás)
- lásd Az órai adatbázissémák 2. példáját (E/K modell, rel.sémák)
- Vizsgáljuk meg a táblák szerkezetét, integritási megszorításokat!
- Fejezzük ki (többféleképpen is) SQL SELECT-tel:
  Kik (HAZON, NEV) azok a 'PTM'-szakos hallgatók, akiknek
  az ösztöndíjuk nagyobb, mint 10000 és  2005. évben  3-nál
  jobb jegyet szereztek 'Adatbázisok1' elnevezésű tantárgyból?

7opt_01
- A fenti több táblás lekérdezés algebrai optimalizációjára példa
  segédanyag: lásd rAlgOpt.rtf
   lásd még EA 67-99.o. (.ppt /jelszóval : Kiss Attila EA)

Lekérdezések végrehajtási terve (költség alapú optimalizálás)
- A lekérdezések végrehajtási tervét az Oracle egy PLAN_TABLE nevű
  vagy ezzel azonos szerkezetű táblába teszi.
- PLAN_TABLE létrehozása -> ablinux gépen található script futtatásával
  /opt/oracle/product/10.2/db_1/rdbms/admin/utlxplan.sql
- Végrehajtási terv létrehozása a PLAN_TABLE nevű táblába:
   EXPLAIN PLAN SET statement_id='utasitas_egyedi_neve'
   FOR
   SELECT ...
- Majd a végrehajtási terv fa struktúrájának kiíratása egy hierarchikus
   lekérdezéssel:
   PROMPT "Adja meg az utasítás nevét:  "
   ACCEPT ut
   SELECT LPAD(' ', 2*level)||operation||' '||options||' '||object_name terv
   FROM plan_table
   START WITH id = 0 AND statement_id = '&&ut'
   CONNECT BY PRIOR id = parent_id AND statement_id = '&&ut'; 7opt_01

7opt_02
- Lekérdezésekre és a végrehajtási tervekre példák: tervek1.txt

7opt_03
- Az ORAUSER felhasználó EMP, DEPT es SALGRADE (fizetési kategóriak)
   tábláiból hozzatok létre saját példányokat, ezekre vonatkozóan adjátok meg
   az alábbi lekérdezést, majd derítsétek ki a végrehajtási tervek fa struktúráját.
- A fa csomópontjaiban az ott elvégzett műveletet es azt az objektumot kell
   megadni, amin a műveletet az adatbáziskezelő végzi.
A lekérdezés:
- Adjuk meg azoknak az osztályoknak a neveit, amelyeknek van olyan dolgozója,
  aki az 1-es fizetési kategóriába esik.
- Adjuk meg, hogy milyen végrehajtasi tervet készít a rendszer.
- Hozzunk létre indexet valamelyik táblához, majd adjuk meg a rendszer
  által létrehozott új végrehajtási tervet. Olyan indexet hozzunk létre, amit
  a lekérdezésben használni tud a rendszer.
- Az EMP es a DEPT táblát most úgy hozzuk létre (pl. EMP2 es DEPT2 néven),
   hogy azok egy clusteren legyenek. Adjuk meg az ehhez létrehozott végrehajtási tervet.

stb. Végrehajtási tervek megváltoztatása tippek (hint) segítségével

Budapest, 2007. szeptember 10.
Utolsó módosítás: 2007. okt.25.

Lap tetejére        Gyak.oldalára      
dr. Hajas Csilla, ELTE IK
E-mail: sila@inf.elte.hu

Vissza a Kezdőlapra