300 likes | 459 Views
Hogyan működik?. if ( fseek(f,poz) ) { fread(f,buf,BUFSIZE); for (i=0; i<buf->cnt;i++) { pp = buf->base + i*SZ; …. DBMS. SELECT SUM(r.d*t.e), r.v FROM rendeles r, termek t WHERE r.termek = t.tid AND t.szin = 'PIROS' GROUP BY r.varos. Data System. SQL parancs.
E N D
Hogyan működik? if ( fseek(f,poz) ) { fread(f,buf,BUFSIZE); for (i=0; i<buf->cnt;i++) { pp = buf->base + i*SZ; …. DBMS SELECT SUM(r.d*t.e), r.v FROM rendeles r, termek t WHERE r.termek = t.tid AND t.szin = 'PIROS' GROUP BY r.varos
Data System SQL parancs szematikai ellenőrzés induló QOG algebrai optimalizálás javitott QOG konverzió fizikai szintre induló QEP költség optimalizálás javitott QEP DB QEP végrehajtás Storage System
A szavak nyelvtani szerepének meghatározása 1 Dave a take a stress … BCNF
Minta feladat : bináris törtszám -101.11_ - 0 0 0 1 2 3 1 + 1 OK 1 . _ _ FGRAF.DBF (k-statusz, esemeny, v-statusz)
parameter sor ajel = 0 sh = len(sor) for i = 1 to sh c = substr(sor,i,1) tb[1] = .f. select vstatusz from fgraf where kstatusz = m.ajel and esemeny == c into array tb if type('tb[1]') <> 'N' messagebox("HIBA") return endif ajel = tb[1] endfor messagebox("OK")
Operátorok és operandusok meghatározása 2 o.megy, a.fiz Osztaly () avg()oid SELECT o.megv, a.fiz FROM osztaly o, (SELECTAVG(fiz), oid FROM dolgozok GROUP BY oid) a WHERE o.oid = a.oid AND a.fiz > 50000; o.oid = a.oid AND a.fiz > 50000
Végrehajtási sorrend meghatározása 3 ( 3 * (4 + 2) + (2 * 3)) + 6 + Végrehajtási gráf generálása + 6 * * 3 + 3 2 2 4
Minta :algebrai kifejezés + × × 3 2 + 2 2 4 parameter gykod ? ite (gykod) function ite parameter gykod ... FA.DBF (id, tipus, ertek, bal, jobb) [1,D,3, , , ] [3,O,×,1,2]
dimension tb[1] tb[1] = .f. select * from fa where id = m.gykod into array tb if type("tb[1,1]") <> "N" messagebox("HIBA") return .f. endif if tb[1,2] = "O" bert = ite (tb[1,4]) jert = ite (tb[1,5]) pa = " ertek = " + bert + " " + tb[1,3] + " " + jert ? pa &pa return str(ertek) else return tb[1,3] endif
Induló QOG meghatározása 4 QOG: algebrai műveletek megadása a gráf csomópontjaiban oid, fiz oid=oid and fiz > 50000 oidoid, avg(fiz) osztaly o dolgozo d
QOG optimalizálása 5 A QOG optimalizálás alapelvei: - szelekciók felbontása elemi szelekciókra - szelekciók lefelé mozgatása - projekciók lefelé mozgatása - összetartozó elemek összevonása A B A B
QOG átalakítási szabályok 5 (1) R S S R (2) (R S) T R (S T) (3) A (B(R)) A(R) , ha A B (4) F(G(R)) G(F(R)) (5) F(G(R)) GF(R)) (6) A(G(R)) G(A(R)) , ha G lefedi A-t (7) G(R S) G(R) S , ha G csak A-t érinti (8) AB(R S) A(R)B(S) (9) A(G(R)) A(G(AB(R))) , ha G a B-re vonatkozik
Minta feladat: SELECT A1,A2,B4,C3 FROM A,B,C WHERE A.A1 = B.B3 AND B.B4 = C.C3 AND A.A2 = X 1
2 3
A logikai terv után meg kell határozni a tényleges adatkezelő lépéseket QEP : Query Execution Plan QEP QOG nem kölcsönösen egyértelmű kapcsolat
Adatbázis kezelő műveletek optimalizálása A QEP csomópontjaiban már nevesített eljárásokat adunk meg, melyek mögött implementált rutinok állnak, melyek meghívhatók, végrehajthatók. A gráf élei irányítottak, s egy A csomópontból akkor mutat él a B csomópontba, ha a B művelet felhasználja az A művelet eredményét. Nested loop eredmény Table access ROWID Optimalizálás: - szabály alapú - költség alapú Index search Table scan A B
SELECT … INTERSECT SELECT .. Alternatívák: - módszerek - csoportosítás - optimalizálás
Oracle aranyszabályai ROWID cluster join concatenated index column index sub-index table scan
Adatbázis kezelő műveletek optimalizálása Rekord elérési költségek ROWID alapú egy rekord c = 1 Clustering index egy kulcsérték c = R/P/I Clustering index érték tartomány c = R/P/2 normál index egy kulcsérték c = R/I normál index érték tartomány c = R/2 szekvencia egy kulcsérték c > R/P ROWID = rekord pozíciót adja meg file:page:record értéke változhat
JOIN algoritmusok (ekvi-join) for x in T1 { for y in T2 { if (x.id = y.id) {….} Nested loop (N1×N2)
Sorted Merge join algoritmus i1 = 1; i2 = 1 Do while i1 < eof1 and i2 < eof2 if (r1.id < r2.id) i1=i1+1 endif if (r1.id > r2.id) i2=i2+1 endif if (r1.id = r2.id) is1 = i1 do while r1.id = rs1.id is1=is1+1; is2 = i2 do while r2.id = rs2.id is2 = is2 + 1 enddo enddo ... A két tábla rekordjait kulcs szerint rendezetten bejárja, s összehasonlítja az aktuális rekordokat C > = N1+N2 + (rendezés) 9 6 6 4 3 3 3 2 1 > 3 2
Hash join algoritmus A rekordok blokkokba rendelődnek, s összehasonlítás csak az azonos blokkban lévő rekordok között szükséges C = N1*N2/B végrehajtás fázisai: szétosztási illesztési h(x) = x mod 3 9 6 6 2 4 3 3 1 4 3 2 1 3 6 túlcsordulás 3 3 hash tábla 6 9
Adatbázis kezelő műveletek optimalizálása Oracle SQL utasítások ALTER SESSION SET OPTIMIZER_GOAL=mód; mód = RULE, FIRST_ROW, ALL_ROWS EXPLAIN PLAN FOR SQL-utasítás EXPLAIN PLAN FOR SELECT nev, rsz, tip FROM auto, ember WHERE auto.tul=ember.id AND auto.szin='KEK'; ID PARENTID OPERATION OPTIONS OBJECT 0 SELECT ... 1 0 NESTED LOOP 2 1 TABLE ACCESS FULL AUTO 3 1 TABLE ACCESS BY ROWID EMBER 4 3 INDEX UNIQ. SCAN SYS_CO..
Adatbázis kezelő műveletek optimalizálása A TPC tesztek (benchmark) Független, egységesített hatékonyság és funkció ellenőrző teszt a különböző jellegű adatbáziskezelő rendszerekhez első általánosabban elfogadott teszt: DebitCredit, 1985 követelmények: - egzakt művelet specifikáció - rugalmas teljesítmény mérési módszer - a valós környezet teljesebb bevonása - ellenőrizhető eredmények TPC: Transaction Processing Performance Council non-profit szervezet a DBMS teljesítmény tesztek (benchmark) karbantartására és ellenőrzésére, kb 26 rendes tagja van
Adatbázis kezelő műveletek optimalizálása TPC-A teszt egy banki automata nyilvántartást szimulál on-line teszt, 1988 tranzakció elemei: számla módosítás, automata módosítás, fiók módosítás, naplózás teljesítés feltétele: a tranzakciók 90% 2 sec-on belül lefut x tps terhelése: x*100000 számla, x*10 automata, x*1 részleg mérik az egy teljesítmény egységre eső beruházási költséget is A1 A2
Adatbázis kezelő műveletek optimalizálása A TPC tesztek során ellenőrzik a DBMS működés helyességét is. ACID elvek betartása - abortálják a tranzakciókat - a rész és a nagyobb egységek összesítő adatait ellenőrzi - párhuzamosan módosítják ugyanazon számlát - rendszer összeomlások kipróbálása Kb. 330 TPC-A teszteredményt hitelesítettek A teljesítmények 10 tps és 3700 tps között helyezkednek el
Adatbázis kezelő műveletek optimalizálása TPC-C teszt egy rendelés nyilvántartást szimulál OLTP, on-line teszt, 1992 tranzakció elemei: rendelés, fizetés, készlet nyilvántartása komplex műveletek, teljesítmény egysége: tpm, öt különböző tranzakció fut párhuzamosan 1 tpm-hez 10 raktár, 30000 ügyfél, 100000 termék tartozik Évente kb. 50 új eredmény (10000-720000 tpm) GépDBMSOStpm$/tpm HP ProLiantSQLServer2000Windows200070922015 IBM xSeriesSQLServer2000Windows2000688228 23 Fujitsu PP200SymphowareSun Solaris45581829 IBM xSeriesIBM DB2Windows200044081619 IBM eServerOracle 9iIBM AIX40325518
Adatbázis kezelő műveletek optimalizálása TPC-H teszt egy rendelés nyilvántartást szimulál OLAP, ad-hoc, on-line teszt, 1998 Több különböző elemzési tranzakció: piac kutatás, vevő menedzsment, profit elemzés,… komplex műveletek, teljesítmény egysége: Qph, 22 paraméteres lekérdezés, 8 kapcsolódó tábla minimum 100 GB adatmennyiség 1000 GB-os teszt GépDBMSOSQph$/qph HP9000 Oracle 9 HP UX25805213 SUN FireOracle 9iSun Solaris18802227 TeradataTeradataMP-RAS18542638
Adatbázis kezelő műveletek optimalizálása TPC-W teszt egy elektronikus bolt vásárlói felületét szimulálja e-commerce, ad-hoc, WEB-es on-line teszt, 1999 Három alap tranzakció: vásárlás, rendelés, kínálat böngészés a WEB-en komplex műveletek, teljesítmény egysége: WIPS 100000 termékre GépDBMSOSWebserverWIPS$/wips Unisys ES700SQLServer2000Windows2000MS IS 10439106 Dell PowerEdgeSQLServer2000Windows2000MS IS975835 IBM xSeries 430IBM DB2IBM ptxMS IS7554137 DBMS WEB server API WEB böngésző