Az Oracle SQL 15.

36
2006. december 2 . Markó Tamás, PTE TTK 1 Az Oracle SQL 15. Hangolás

description

Az Oracle SQL 15. Hangolás. A rádiótelefonokat kérem KIKAPCSOLNI!. Olvasnivaló. Gyári dokumentáció: Oracle 9i Database Performance Planning Oracle 9i Database Performance Tuning Guide and Reference (1. és 6. fejezet). A hangolás. - PowerPoint PPT Presentation

Transcript of Az Oracle SQL 15.

Page 1: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 1

Az Oracle SQL 15.

Hangolás

Page 2: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 2

A rádiótelefonokat kérem

KIKAPCSOLNI!

Page 3: Az  Oracle  SQL 15.

2006. november 26. Markó Tamás, PTE TTK 3

Olvasnivaló

• Gyári dokumentáció:– Oracle 9i Database Performance Planning – Oracle 9i Database Performance Tuning Guide

and Reference (1. és 6. fejezet)

Page 4: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 4

A hangolás• Ugyanazt az eredményt sokszor több különböző

utasítással is el lehet érni• Egy utasítást sokszor több különböző módon is

végre lehet hajtani• A lehetőségek közötti választás nagyban

befolyásolja a végrehajtási időt• Az (eredmény szempontjából) ekvivalens

utasítások közül való választás a mi feladatunk• A végrehajtási lehetőségek közötti választást az

Oracle végzi, de mi is beleszólhatunk

Page 5: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 5

Az SQL utasítások végrehajtásaS

QL

com

pile

r

Page 6: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 6

Az egyes részek feladatai• Elemző (parser):

– szintaktikai elemzés

– szemantikai ellenőrzés (a hivatkozott objektumok megléte)

• Optimalizáló:– meghatározza a végrehajtás leghatékonyabb módját

– két fajtája van

– a költségalapú optimalizálót (CBO, cost based optimizer) javasolja az Oracle

• Sorforrás-generátor (row source generator):– a sorforrás adatsorokat állít elő

– az utasítás végrehajtási terve több sorforrást tartalmazhat

Page 7: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 7

Az optimalizáló

Page 8: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 8

Az optimalizáló munkája

• Figyelembe veszi– az utasításban használt objektumok tulajdonságait

– az utasításban előírt feltételeket

• Az optimalizálás lépései– a konstansokat tartalmazó kifejezések és feltételek

minél teljesebb kiértékelése

– az utasítás átalakítása más ekvivalens formára (ha kell)

– az optimalizálás módjának meghatározása

– a táblák elérési módjának meghatározása

– a táblák összekapcsolási sorrendjének meghatározása

– a táblák összekapcsolási módjának meghatározása

Page 9: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 9

Az optimalizáló munkájának befolyásolása

• Megszabható az optimalizálás módja– az adatbáziskezelő futó példányának (instance) egészére

vonatkozik (OPTIMIZER_MODE inicializáló paraméter)

• A költségalapú optimalizálásnál megszabható az optimalizálás célja– az aktuális munkamenetre (session) vonatkozik

(OPTIMIZER_GOAL paraméter az ALTER SESSION parancshoz)

• Útmutatás (hint) adható az egyes utasítások végrehajtási módjához

Page 10: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 10

Az optimalizálás célja

• Alapértelmezett: az utasítás leggyorsabb teljes végrehajtása– a batch üzemmódú alkalmazásoknál (pl. jelentések

készítése) ez a logikus választás

• A másik lehetőség: a leggyorsabb válasz (az első sorok gyors megjelenítése)– interaktív alkalmazásoknál ésszerű

Page 11: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 11

Az optimalizálást befolyásoló statisztikai adatok

• Az Oracle statisztikákat gyűjt az adatok– változékonyságáról (eloszlásáról)

– fizikai tárolásáról

• Ezek ismerete nagymértékben javítja a költségalapú optimalizálás hatékonyságát

• A lehetőségekre vonatkozóan lásd a DBMS_STATS programcsomagot

Page 12: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 12

A táblák elérési módjai 1.

• Full table scan– a tábla minden sorát feldolgozza

– soros elérés, gyors

– minden sort csak egyszer dolgoz fel

• Sample table scan– a tábla véletlenszerűen kiválasztott sorait dolgozza fel

• Rowid scan– a leggyorsabb mód egy sor eléréséhez

Page 13: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 13

A táblák elérési módjai 2.• Index scan

– adatelérés az indexelés alapjául szolgáló mezők értéke szerint

– nem is olvassa az eredeti táblát, ha az utasításban csak az indexben lévő mezők fordulnak elő

– több altípusa van

• Cluster scan– egy clusterben tárolt összes sor elérése

• Hash cluster scan– hash clusterben tárolt adatok elérésére

Page 14: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 14

A táblák összekapcsolási sorrendje

• Kettőnél több tábla összekapcsolása esetén érdekes

• A rendszer először két táblát kapcsol össze• Ennek eredményét összekapcsolja a harmadikkal• Egyesével kapcsolja hozzá a többi szükséges

táblát it

Page 15: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 15

A táblák összekapcsolási módjai

• Nyolc fajta van, különböző körülmények között hatásosak– nested loop joins

– nested loop outer joins

– hash joins

– hash join outer joins

– sort merge joins

– sort merge outer joins

– cartesian joins

– full outer joins

Page 16: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 16

Az utasítás végrehajtási terve

Page 17: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 17

Az utasítás végrehajtási terve

• Execution plan• Az optimalizáló munkájának eredménye• Az egyes utasítások végrehajtási terve

lekérdezhető az EXPLAIN PLAN … utasítással

Page 18: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 18

Az EXPLAIN PLAN utasítás

• Egy SQL utasítás végrehajtási terve kérdezhető le vele

• A végrehajtási terv adatait egy előre elkészített táblába teszi

• A terv elkészülte után a tábla lekérdezhető• Az utasítás végrehajtásához megfelelő

jogosultságok szükségesek• A részleteket lásd a gyári dokumentáció SQL

Reference Manual című kötetében

Page 19: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 19

Példa az EXPLAIN PLAN használatára

EXPLAIN PLAN FOR

SELECT ename, job, sal, dname

FROM scott.emp, scott.dept

WHERE emp.deptno=dept.deptno

AND NOT EXISTS

(SELECT * FROM scott.salgrade

WHERE emp.sal NOT BETWEEN

hisal AND lowsal);

nincs olyan beosztás,ahol az illető fizetése

az előírt határokközé esne

Page 20: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 20

Az EXPLAIN PLAN által előállított adatok

ID OPERATION OPTIONS OBJECT_NAME

---------------------------------------------

0 SELECT STATEMENT

1 FILTER

2 NESTED LOOPS

3 TABLE ACCESS FULL EMP

4 TABLE ACCESS BY ROWID DEPT

5 INDEX UNIQUE SCAN PK_DEPTNO

6 TABLE ACCESS FULL SALGRADE

Page 21: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 21

Az adatok értelmezése 1.ID OPERATION

---------------------

0 SELECT STATEMENT

1 FILTER

2 NESTED LOOPS

3 TABLE ACCESS

4 TABLE ACCESS

5 INDEX

6 TABLE ACCESS

1FILTER

2NESTED LOOPS

6TABLE ACC.(salgrade, full)

3TABLE ACC.

(emp, full)

4TABLE ACC.

(dept, by rowid)

5INDEX

(pk_deptno, unique scan)fa-szerkezetszintjei

minden lépésegy sorforrás

Page 22: Az  Oracle  SQL 15.

2006. december 2. 22

Az adatok értelmezése 2.1

FILTER

2NESTED LOOPS

6TABLE ACC.(salgrade, full)

3TABLE ACC.

(emp, full)

4TABLE ACC.

(dept, by rowid)

5INDEX

(pk_deptno, unique scan)

SELECT ename, job, sal, dname

FROM scott.emp, scott.dept

WHERE emp.deptno=dept.deptno

AND NOT EXISTS

(SELECT * FROM scott.salgrade

WHERE emp.sal NOT BETWEEN

hisal AND lowsal);

a szürke lépések azelőző lépések adatait

dolgozzák fel

a kék lépések azadatbázisból veszik

az adatokat

a DEPTNO kulcs,egyedi index van hozzá

az index rowid-tad vissza

a legfelső szinta felhasználónakadja az adatokat

Page 23: Az  Oracle  SQL 15.

2006. december 2. 23

A végrehajtási sorrend 1.1

FILTER

2NESTED LOOPS

6TABLE ACC.(salgrade, full)

3TABLE ACC.

(emp, full)

4TABLE ACC.

(dept, by rowid)

5INDEX

(pk_deptno, unique scan)

SELECT ename, job, sal, dname

FROM scott.emp, scott.dept

WHERE emp.deptno=dept.deptno

AND NOT EXISTS

(SELECT * FROM scott.salgrade

WHERE emp.sal NOT BETWEEN

hisal AND lowsal);

1

2

3

4 5

6

Végigolvassa a teljes EMP táblát.A sorokat egyenként átadja a 2-es lépésnek.

(Az összes további lépés az EMP tábla minden sorára külön-külön végrehajtódik)

Page 24: Az  Oracle  SQL 15.

2006. december 2. 24

A végrehajtási sorrend 2.1

FILTER

2NESTED LOOPS

6TABLE ACC.(salgrade, full)

3TABLE ACC.

(emp, full)

4TABLE ACC.

(dept, by rowid)

5INDEX

(pk_deptno, unique scan)

SELECT ename, job, sal, dname

FROM scott.emp, scott.dept

WHERE emp.deptno=dept.deptno

AND NOT EXISTS

(SELECT * FROM scott.salgrade

WHERE emp.sal NOT BETWEEN

hisal AND lowsal);

1

2

3

4 5

6

A 2-es lépéstől kapott DEPTNO-tmegkeresi az indexben és a hozzá tartozó

ROWID-t átadja a 4-es lépésnek.

Page 25: Az  Oracle  SQL 15.

2006. december 2. 25

A végrehajtási sorrend 3.1

FILTER

2NESTED LOOPS

6TABLE ACC.(salgrade, full)

3TABLE ACC.

(emp, full)

4TABLE ACC.

(dept, by rowid)

5INDEX

(pk_deptno, unique scan)

SELECT ename, job, sal, dname

FROM scott.emp, scott.dept

WHERE emp.deptno=dept.deptno

AND NOT EXISTS

(SELECT * FROM scott.salgrade

WHERE emp.sal NOT BETWEEN

hisal AND lowsal);

1

2

3

4 5

6

Az 5-ös lépéstől kapott ROWID alapjánmegtalálja a részleg adatait és

DNAME-et átadja a 2-es lépésnek.

Page 26: Az  Oracle  SQL 15.

2006. december 2. 26

A végrehajtási sorrend 4.1

FILTER

2NESTED LOOPS

6TABLE ACC.(salgrade, full)

3TABLE ACC.

(emp, full)

4TABLE ACC.

(dept, by rowid)

5INDEX

(pk_deptno, unique scan)

SELECT ename, job, sal, dname

FROM scott.emp, scott.dept

WHERE emp.deptno=dept.deptno

AND NOT EXISTS

(SELECT * FROM scott.salgrade

WHERE emp.sal NOT BETWEEN

hisal AND lowsal);

1

2

3

4 5

6

A 3-as és 4-es lépéstől kapott egy-egy sortegybefűzi, ezzel előáll a fenti SELECT

egy lehetséges sora.Ezt átadja az 1-es lépésnek.

Page 27: Az  Oracle  SQL 15.

2006. december 2. 27

A végrehajtási sorrend 5.1

FILTER

2NESTED LOOPS

6TABLE ACC.(salgrade, full)

3TABLE ACC.

(emp, full)

4TABLE ACC.

(dept, by rowid)

5INDEX

(pk_deptno, unique scan)

SELECT ename, job, sal, dname

FROM scott.emp, scott.dept

WHERE emp.deptno=dept.deptno

AND NOT EXISTS

(SELECT * FROM scott.salgrade

WHERE emp.sal NOT BETWEEN

hisal AND lowsal);

1

2

3

4 5

6

Az 1-es lépéstől kapott EMP.SAL használatával végrehajtja a beágyazottlekérdezést, az összes megfelelő sort

visszaadja az 1-es lépésnek.

Page 28: Az  Oracle  SQL 15.

2006. december 2. 28

A végrehajtási sorrend 6.1

FILTER

2NESTED LOOPS

6TABLE ACC.(salgrade, full)

3TABLE ACC.

(emp, full)

4TABLE ACC.

(dept, by rowid)

5INDEX

(pk_deptno, unique scan)

SELECT ename, job, sal, dname

FROM scott.emp, scott.dept

WHERE emp.deptno=dept.deptno

AND NOT EXISTS

(SELECT * FROM scott.salgrade

WHERE emp.sal NOT BETWEEN

hisal AND lowsal);

1

2

3

4 5

6

Ha a 6-os lépéstől nem kapott adatot, akkor a 2-es lépéstől kapott sort átadja

a felhasználónak (egyébként nem).

Page 29: Az  Oracle  SQL 15.

29

Szempontok a végrehajtásnál• A végrehajtás a fa leveleinél kezdődik

• Ha egy szülő-lépés végrehajtható már a gyerek-lépések egy sorával is, akkor végrehajtódik (és az eredményt továbbadja az ő szülőjének

• Soronként végrehajtható tipikus műveletek: – tábla elérése– index elérése– szűrés

• Csak az összes sor ismeretében végrehajtható lépések:– rendezés– összesítő függvények kiszámítása

felhasználó megkaphatja azelső sorokat a teljes utasítás

végrehajtása előtt is

Page 30: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 30

Az SQL utasítások optimalizálása

Page 31: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 31

A kritikus utasítások megtalálása adott programban

• A statikus SQL utasítások közvetlenül láthatók• A dinamikus (az alkalmazás futási idejében

felépített) SQL-ről az SQL_TRACE és a TK_PROF segítségével kaphatunk adatokat

Page 32: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 32

A kritikus utasítások megtalálása egy teljes alkalmazásban

• A Statspack alkalmazás segítségével adatok gyűjthetők a rendszer teljesítményéről

• Az összegyűjtött adatok bizonyos nézettáblákon keresztül érhetők el

• Legalapvetőbb a V$SQLAREA– utasításonként adja meg a használt erőforrásokat

Page 33: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 33

Hatékonyságjavító intézkedések 1.

• Az optimalizáló által használt statisztikai adatok felülvizsgálata– gyűjtsük őket az összes tábláról

– legyenek az adatok frissek

• Az utasítások végrehajtási tervének elemzése– néha okosabbak lehetünk a rendszernél

• Az SQL utasítások átalakítása– tegyük lehetővé, hogy az Oracle használja az indexeket

Page 34: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 34

Hatékonyságjavító intézkedések 2.

• Minden feladatra külön utasítást írjunk– inkább több egyszerű utasítás, mint egy összetett

• Beágyazott SELECT esetében a helyzettől függően válasszunk az IN és az EXISTS között

• Adjunk útmutatást (hint) a rendszernek– mi többet tudhatunk az adatbázisról

• Óvatosan használjuk a nézettáblákat– nagyon lelassíthatják a lekérdezéseket

Page 35: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 35

Hatékonyságjavító intézkedések 3.

• Tároljuk a közbülső eredményeket– előnyös, ha többször is felhasználjuk őket

• Vizsgáljuk felül az indexeket• Vizsgáljuk felül a triggereket és a kényszereket• Vizsgáljuk felül az adatbázis szerkezetét• Őrizzük meg az utasítások végrehajtási tervét

– legközelebb már nem kell előállítani

• Lehetőleg csak egyszer érjünk el minden adatot

Page 36: Az  Oracle  SQL 15.

2006. december 2. Markó Tamás, PTE TTK 36

A rendszer működési filozófiája megérthető és kihasználható!