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 HTMLPDF
é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
- 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).
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.
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!