IP-08abctAB2G
Adatbázisok-2 gyakorlat
ELTE, 2014/2015.tanév I.félév
Hajas Csilla gyak.vez.
Hétfő
12:15-13:45 PC3, 14:00-15:30 PC3,
Szerda 10:15-11:45 PC9
AB2gyak
(főmenü)
AB2ea
8.gyak
10.gyak
OracleDoc
9.gyak.
Bevezetés
a költség alapú
tervválasztásba II.
Végrehajtási
tervek előállítása és megváltoztatása
C (gépes
feladatok) -- II.ZH gépes részében: C4
és C5 témák!
> C3. Statisztikák
kiszámítása és kezelése (ez
nem lesz a zh-án)
> C4.
Végrehajtási tervek az Oracle demo
táblái alapján
> C5.
SQL utasítás rekonstruálása
a végrehajtási terv alapján
P (papíros feladatok)
> P1.
Lekérdezések
végrehajtása és I/O költségek
-- Tk.2.3. és 6.2.-6.9.
> 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.
C3.
Statisztikák
kiszámítása és
kezelése
Segédanyagok:
- 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
- Kiss
Attila Adatbázisok-2 előadása,
lásd 7.előadás 9ituning
77-78.o: Analyze.pdf
- Exec_Plans_Stats.ppt
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.
C4.
Végrehajtási
tervek az Oracle demo táblái alapján
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 Database Documentation Library: Sample
Schemas HTML
PDF
HR
- Human Resource: Figure
4-1 HR and OE Schemas
SH
-Sales History: Figure
4-3 SH Schema
- Oracle 11g Doc. Performance Tuning
Guide 11-21.fejezetek HTML
PDF
Emlékeztető:
Hintekről: 19.
Using Optimizer Hints
>> hintek.txt
(Nikovits T.)
_______________________________________________________________
Feladatok:
- A
lekérdezésekhez az Oracle demo
tábláit, a HR és SH
sémához
tartozó táblákat
használjuk, 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: HR.<táblanév>,
SH.<táblanév>
- A táblákhoz
különböző
indexek is vannak
létrehozva, ezek tulajdonságait a
katalógusokból
(dba_ind_columns)
nézhetjük meg, amikor
szükségünk van rá.
4.1.feladat:
- Adjuk meg azoknak a vevőknek a nevét
(SH.CUSTOMERS),
akik
nőneműek (cust_gender =
'F') és szinglik
(cust_marital_status =
'single'),
vagy 1917 és 1920
között
születtek.
a) Vegyük rá az
Oracle-t, hogy a
meglévő bitmap indexek alapján érje el
a
tábla sorait.
b) Vegyük rá, hogy
ne használja ezeket az indexeket.
4.2.feladat:
- Adjuk meg egy féléves
időszakra
(illetve egy másik féléves időszakra)
vonatkozóan az
eladások (SH.SALES)
összmennyiségét, úgy,
hogy az
Oracle ne
használjon indexet és
a) pontosan
2 partíciót olvasson a
táblából, illetve
b) pontosan
3 partíciót olvasson a
táblából.
Lásd partition_start
és partition_stop
oszlopokat a PLAN_TABLE-ben!
- Lásd még a tervek4.txt
és a hint_peldak.txt
(Nikovits Tibor) példáit!
C5.
SQL
utasítás rekonstruálása a
végrehajtási terv alapján
Feladatok: Adjunk
meg olyan
lekérdezéseket az SH
tábláira (és
indextábláira)
(hintekkel együtt, ha
szükséges), aminek az alábbi lesz a
végrehajtási terve:
5.1.
(a)-(c) feladat
TERV (OPERATION + OPTIONS + OBJECT_NAME)
----------------------------------------
SELECT STATEMENT + +
HASH JOIN + +
TABLE ACCESS + FULL + COUNTRIES
TABLE ACCESS + FULL + CUSTOMERS
SELECT STATEMENT + +
NESTED LOOPS + +
TABLE ACCESS + FULL + COUNTRIES
TABLE ACCESS + FULL + CUSTOMERS
SELECT STATEMENT + +
MERGE JOIN + +
TABLE ACCESS + BY INDEX ROWID + COUNTRIES
INDEX + FULL SCAN + COUNTRIES_PK
SORT + JOIN +
TABLE ACCESS + FULL + CUSTOMERS
5.2.
(a)-(b) feladat:
TERV (OPERATION + OPTIONS + OBJECT_NAME)
----------------------------------------
SELECT STATEMENT + +
HASH + GROUP BY +
HASH JOIN + +
TABLE ACCESS + FULL + COUNTRIES
TABLE ACCESS + FULL + CUSTOMERS
SELECT STATEMENT + +
HASH + GROUP BY +
HASH JOIN + +
TABLE ACCESS + FULL + COUNTRIES
TABLE ACCESS + BY INDEX ROWID + CUSTOMERS
BITMAP CONVERSION + TO ROWIDS +
BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
5.3.feladat:
TERV (OPERATION + OPTIONS + OBJECT_NAME)
--------------------------------------------------------------
SELECT STATEMENT + +
SORT + ORDER BY +
TABLE
ACCESS + BY INDEX ROWID + CUSTOMERS
BITMAP CONVERSION + TO ROWIDS +
BITMAP AND + +
BITMAP INDEX + SINGLE VALUE + CUSTOMERS_MARITAL_BIX
BITMAP OR + +
BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
BITMAP INDEX + SINGLE VALUE
+ CUSTOMERS_YOB_BIX
BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
5.4.feladat:
TERV
(OPERATION + OPTIONS + OBJECT_NAME)
-------------------------------------------------------------
SELECT
STATEMENT + +
HASH + GROUP BY +
HASH JOIN + +
INLIST ITERATOR + +
TABLE ACCESS + BY
INDEX ROWID + CUSTOMERS
BITMAP
CONVERSION + TO ROWIDS +
BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
PARTITION RANGE + ALL +
TABLE ACCESS + FULL
+ SALES
5.5.feladat:
TERV
(OPERATION + OPTIONS + OBJECT_NAME)
------------------------------------------------------------
SELECT
STATEMENT + +
SORT + AGGREGATE +
HASH JOIN + +
TABLE ACCESS + FULL + PRODUCTS
HASH JOIN + +
TABLE ACCESS + BY INDEX ROWID +
CUSTOMERS
BITMAP CONVERSION + TO ROWIDS
+
BITMAP INDEX +
SINGLE VALUE + CUSTOMERS_YOB_BIX
PARTITION RANGE + ALL +
TABLE ACCESS + FULL + SALES
5.6.feladat:
TERV (OPERATION + OPTIONS + OBJECT_NAME)
-------------------------------------------------------------
SELECT
STATEMENT + +
SORT + ORDER BY +
HASH + GROUP BY +
HASH JOIN + ANTI +
PARTITION RANGE + SINGLE +
TABLE ACCESS + BY LOCAL INDEX ROWID + SALES
BITMAP CONVERSION + TO ROWIDS +
BITMAP INDEX + SINGLE VALUE + SALES_TIME_BIX
TABLE
ACCESS + FULL + CHANNELS
P3.
Költség
alapú
optimalizálás, output
méretének
becslése
Segédanyagok:
- Nikovits Tibor (Kiss Attila
kézirata
alapján) Tetel9_kidolgozott.pdf
- Kiss
Attila Adatbázisok-2 előadása,
lásd
7.előadás QueryProcessingWithSemijoin-hu.ppt
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!