Bevezetés
a költség alapú
tervválasztásba I.
Feladatok végrehajtási
tervek
előállítására (PLAN_TABLE)
_______________________________________________________________ Segédanyagok:
>> Oracle Doc. -
Performance Tuning Guide HTMLPDF
és itt 13-19. fejezetek,
lásd
19. fejezet Végrehajtási tervek: 19.
Using EXPLAIN PLAN [ex_plan.htm]
>> Nikovits Tibor: tervek1.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
(ha az
eredménytábla nagy, akkor annak az első
5
sora),
3.) végrehajtási
tervek
fastruktúrájának szöveges
megjelenítése (lásd
köv.részt)
Előkészítés:
- A gyakorlatokon az oradb
adatbázisban az sqldeveloper-rel
dolgozunk, ahol
a SELECT-teket
az Execute
Statement
(F9)
hajtjuk végre és
az eredményt
a Result
ablakban látjuk, a
végrehajtási terveket az Execute
Explain
Plan
(F6)
segítségével
készítjük el,
annak eredményét pedig az Explain
ablakban találjuk.
- Mivel a Result
és az Explain ablakok
eredményét nem tudjuk zh-ban beküldeni,
ezért a zh-n Run
Script
(F5)-tel
futtassuk a SELECT
utasítást és az eredményt
a Script
Output-ból
másoljuk át a beadandó egyszerű
szöveges .txt állományba.
- A
végrehajtási tervek
fastruktúrájának szöveges
megjelenítéséhez (a
beküldéshez)
hozzuk létre a
PLAN_TABLE
nevű táblát az utlxplan.sql
scriptnek a futtatásával.
A.)
Végrehajtási tervek
előállítása és
kiíratása hierarchikus
kérdés
segítségével
- 1.lépés:
Készítsük el az
utasítások végrehajtási
tervét a
a
PLAN_TABLE
táblába:
EXPLAIN PLAN SET statement_id='utasitas_egyedi_neve' INTO
plan_table FOR
SELECT ...
- 2.lépés: Ezután
vegyük
is ki a terveket a
táblából a megfelelő
lekérdezéssel
Emlékeztetőül a
hierarchikus
szerkezetű adatok lekérdezéseSELECT
utasítás
segítségével: a hierarchia
gyökerét (gyökereit) a START
WITH-el,
a szülő és gyermek
sorok
közti kapcsolatot a CONNECT
BY-al kell megadni,
SET PAGESIZE 40 SET
LINESIZE 132 COLUMN
terv FORMAT
A50 COLUMN
feltetel
FORMAT A80 TRUNCATED COLUMN
"feltetel
(access--filter)" FORMAT A80 TRUNCATED
SELECT
LPAD(' ', 2*(level-1))||operation||' + '||options||' + '||object_name
terv,
access_predicates||' -- '||filter_predicates "feltetel (access--filter)"
FROM plan_table
START WITH id = 0
AND statement_id = 'utasitas_egyedi_neve'
CONNECT BY PRIOR
id = parent_id AND statement_id = 'utasitas_egyedi_neve'
ORDER SIBLINGS BY
position;
-
Figyeljünk oda, hogy a
végrehajtási tervek
előállításánál a
fenti EXPLAIN
PLAN parancsban
EXPLAIN PLAN SET statement_id='utasitas_egyedi_neve' INTO
plan_table
FOR
SELECT ...
az 'utasitas_egyedi_neve'-k
helyére minden
feladatnál új
statement_id-t adjunk meg,
és ugyanezt az
egyedi nevet
haszáljuk a tervek
megjelenítésénél
(kétszer is begépelve)
SELECT... FROM
plan_table
START WITH
... statement_id = 'utasitas_egyedi_neve'
CONNECT BY PRIOR
... statement_id = 'utasitas_egyedi_neve'...
B.)
Végrehajtási tervek
előállítása és
kiíratása dbms_xplan package
segítségével
- 1.lépés:
Készítsük el az
utasítások végrehajtási
tervét a
a
PLAN_TABLE
táblába:
EXPLAIN
PLAN [SET
statement_id='utasitas_egyedi_neve'] [INTO
sajat_plan_table]
FOR SELECT ...
- 2.lépés: A
végrehajtási tervek
megjelenítése a
dbms_xplan package
segítségével
set markup html preformat on
SELECT
plan_table_output
FROM
table(dbms_xplan.display('saját_plan_table','utasitas_egyedi_neve','all'));
-- paraméterek: első két paraméter
lehet null vagy tábla_név ill. statement_id,
harmadik paraméter pedig a
részletesség (basic, typical, all, serial) set
markup html
preformat off
C.) vagy egyszerűen csak
- 1.lépés:
Készítsük el az
utasítások végrehajtási
tervét a
a
PLAN_TABLE
táblába:
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);
_______________________________________________________________
1.feladat:
Lekérdezések és
végrehajtási tervek
(index nélkül illetve indexek
létrehozásával)
az Oracle EMP, DEPT,
SALGRADE alaptáblái alapján
- Az ORAUSER
felhasználó
EMP,DEPT
és SALGRADE
(fizetési kategóriák)
tábláiból hozzunk
létre saját példányokat
(lásd script - fontos,
hogy itt a lap tetején
leírtak szerint hozzuk létre az ORAUSER vagy SILA felhasználó
meglévő tábláiból
a saját példányainkat, vagy ha
közvetlenül hozzuk létre, akkor vegyük ki a
scriptből
a megszorításokat, vagyis
megszorítások és indexek nélkül
használjuk a tábláinkat).
- A saját EMP,DEPT,SALGRADE táblákra vonatkozóan:
Adjuk meg azoknak az
osztályoknak a neveit, amelyeknek van olyan
dolgozója,
aki az 1-es fizetési
kategóriába esik.
- Ezután hozzunk létre
indexet valamelyik
táblához, majd adjuk meg a rendszer
által létrehozott
új
végrehajtási tervet. Olyan indexeket hozzunk
létre,
amit
a lekérdezésben
használni tud
a rendszer és ez legyen is látható az
új
tervből.
- Lásd még a tervek1.txt feladatait
(egyszerűbb és bonyolultabb lekérdezések
végrehajtási tervei,
valamint különböző megszorítások
és indexek hozzáadásával
milyen változások történnek
ezeken a végrehajtási terveken?) _______________________________________________________________
2.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_nézetekből)
nézhetjük meg, amikor
szükségünk van rá.
- NIKOVITS
felhasználó tulajdonában levő
táblákra adjuk meg a lekérdezést
és a hozzá tartozó
végrehajtási terv fa
struktúráját (mentsük is le
szövegfájlba).
- Adjuk meg a piros cikkekre vonatkozó
szállitások
összmennyiségét. Ezt a feladatot a következő
héten folytatjuk a hintek
hozzáadásával!
- Lásd még a tervek2.txt feladatait!
_______________________________________________________________ Kötelező házi feladat:
Kérem, hogy a mai gyakorlat
lekérdezéseit
és
végrehajtási terveit a mai óra
végén
vagy legkésőbb a
következő gyakorlatig küldje be emailben
"<ehakod>_8gy.txt"
nevű szöveges fájlban (ahol az
<ehakod>
helyére a saját ETR
azonosító
kerüljön).