Documente Academic
Documente Profesional
Documente Cultură
Caracteristici Esentiale Ale SGBD Si SGBC
Caracteristici Esentiale Ale SGBD Si SGBC
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
CUPRINS
TENDINE ACTUALE N INDUSTRIA SGBD................................................................5 Sisteme de Gestiune a Bazelor de Date (SGBD)..............................................................5 Tranzacii..........................................................................................................................5 Arhitecturi Client / Server.................................................................................................6 Sisteme deschise i bd distribuite......................................................................................8 Baze de date distribuite.................................................................................................8 Programe interfa de acces..........................................................................................9 Medii de procesare paralel..............................................................................................9 Arhitecturi fr partajare.............................................................................................10 Arhitecturi cu discuri partajate....................................................................................10 Arhitecturi cu memorie partajat................................................................................11 Patru tipuri de cuplare a procesoarelor: strns, lejer, simetric, i asimetric.........11 Procesarea paralel a tranzaciilor i interogrilor .....................................................11 Procesarea paralel a indexurilor i a programelor utilitare........................................12 Sisteme orientate obiect..................................................................................................12 Gestiunea obiectelor persistente n arhitecturi client / server.....................................13 Un exemplu de bd orientat obiect..............................................................................14 Integrarea n Internet.......................................................................................................15 Cinci exemple de SGBD celebre.....................................................................................18 DATABASE2 (DB2) MVS / ESA versiunile 3 i 4 ale IBM ....................................18 Oracle 7.1 al Oracle.....................................................................................................18 SQL Server 10.0 al Sybase.........................................................................................19 NonStop SQL / MP al Tandem...................................................................................19 CA-OpenIngres al Computer Associates....................................................................19 Comentarii i referine bibliografice...............................................................................20 2. CONTROLUL CONCURENEI...................................................................................21 Lacte..............................................................................................................................21 Cele dou tipuri fundamentale de lacte: partajabil i exclusiv..................................21 Granularitatea..................................................................................................................22 Niveluri de izolare a lactelor.........................................................................................23 Izolarea citirilor repetabile..........................................................................................23 Stabilitatea cursorului.................................................................................................23 Blocarea n dou faze......................................................................................................24 Blocaje fatale...................................................................................................................25 Blocaje fatale globale n bd distribuite........................................................................25 Comentarii i referine bibliografice...............................................................................26 Controlul concurenei n DB2.....................................................................................26 Controlul concurenei n NonStop SQL......................................................................27 Controlul concurenei n Oracle..................................................................................28 Controlul concurenei n SQL Server al Sybase.........................................................29 Controlul concurenei n CA-OpenIngres...................................................................30 3. SALVRI I RECUPERAREA DIN EROARE............................................................32 Jurnale de actualizri.......................................................................................................32 Refacerea i desfacerea automat a actualizrilor.......................................................32 Puncte de verificare.........................................................................................................33 2
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008 Recuperarea din dezastre.................................................................................................35 Comentarii i referine bibliografice...............................................................................35 Salvri i recuperri n DB2........................................................................................35 Salvri i recuperri n NonStop SQL.........................................................................36 Salvri i recuperri n Oracle.....................................................................................36 Salvri i recuperri n SQL Server al Sybase............................................................37 Salvri i recuperri n CA-OpenIngres......................................................................38 4. SECURITATEA DATELOR..........................................................................................39 Privilegii..........................................................................................................................39 Codificarea datelor i verificarea accesului....................................................................39 Ierarhia nivelurilor de acces utilizator n bd distribuite..................................................40 Comentarii i referine bibliografice...............................................................................40 Securitatea datelor n DB2..........................................................................................40 Securitatea datelor n NonStop SQL...........................................................................40 Securitatea datelor n Oracle.......................................................................................41 Securitatea datelor n SQL Server...............................................................................41 Securitatea datelor n CA-OpenIngres........................................................................41 5. IMPUNEREA CONSTRNGERILOR DE INTEGRITATE........................................42 Integritatea domeniilor de valori.....................................................................................42 Integritatea referinelor....................................................................................................42 Trgaciuri........................................................................................................................43 Procesarea n dou faze a terminrii execuiei tranzaciilor............................................43 Comentarii i referine bibliografice...............................................................................45 Impunerea constrngerilor n DB2..............................................................................45 Impunerea constrngerilor n NonStop SQL..............................................................46 Impunerea constrngerilor n Oracle...........................................................................46 Impunerea constrngerilor n SQL Server..................................................................46 Impunerea constrngerilor n CA-OpenIngres............................................................46 6. IMPLEMENTAREA FIIERELOR INDEX...............................................................47 Accesul talme-balme (hash)..................................................................................47 Arbori B+........................................................................................................................48 Memorarea grupat a tuplilor n pagini...........................................................................49 Comentarii i referine bibliografice...............................................................................49 Fiiere index n DB2...................................................................................................50 Fiiere index n NonStop SQL....................................................................................50 Fiiere index n Oracle................................................................................................50 Fiiere index n SQL Server........................................................................................50 Fiiere index n CA-OpenIngres.................................................................................50 7. OPTIMIZAREA PROCESRII I ACCESULUI LA DATE.....................................51 Optimizarea operatorului join.........................................................................................51 Implementarea bucl n bucl a joinului..................................................................51 Implementarea sort/reuniune a join-ului..................................................................51 Implementarea hibrid a joinului................................................................................52 Implementarea talme-balme a join-ului................................................................52 Implementarea folosind semijoin-uri n bd distribuite................................................52 Alte tipuri de optimizri ale procesrii datelor...............................................................53 Folosirea mai multor fiiere index per tabel: implementarea index AND i index OR a seleciilor................................................................................................................54 3
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008 Optimizarea accesului la date bazat pe reguli...............................................................55 Optimizarea accesului la date bazat pe costuri..............................................................55 Mecanisme de control a optimizrii accesului la date....................................................55 Optimizarea global a accesului n bd distribuite...........................................................56 Comentarii i referine bibliografice...............................................................................57 Optimizarea n DB2....................................................................................................57 Optimizarea n NonStop SQL.....................................................................................58 Optimizarea n Oracle.................................................................................................58 Optimizarea n SQL Server.........................................................................................58 Optimizarea n CA-OpenIngres..................................................................................58 8. CATALOAGE DE META-DATE................................................................................59 Structura i coninutul cataloagelor.................................................................................59 Accesul utilizatorilor la cataloage...................................................................................59 Gestiunea cataloagelor n bd distribuite..........................................................................60 Comentarii i referine bibliografice...............................................................................60 Cataloagele n DB2.....................................................................................................60 Cataloagele n NonStop SQL......................................................................................61 Cataloagele n Oracle..................................................................................................61 Cataloagele n SQL Server..........................................................................................61 Cataloagele n CA-OpenIngres...................................................................................61 9. INTERFEE DE PROGRAMAREA APLICAIILOR (API).....................................62 Interfee ncorporate i interfee apel..............................................................................62 SQL static i dinamic. Proceduri memorate....................................................................62 Comentarii i referine bibliografice...............................................................................63 API n DB2..................................................................................................................63 API n NonStop SQL..................................................................................................63 API n Oracle..............................................................................................................63 API n SQL Server......................................................................................................64 API n CA-OpenIngres................................................................................................64
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
SGBD sunt azi oferite pe o mare varietate de platforme de calcul, pornind de la calculatoarele personale (PC) i pn la sistemele de procesare paralel masiv a datelor, sub medii extrem de diverse, incluznd DOS, Windows, Novell Netware, Macintosh, Unix, OS/2, VMS, OS/400, MVS. Majoritatea liderilor mondiali din industria de programare ofer cel puin un SGBD, dac nu mai multe; dintre acetia, este suficient s amintim IBM, Computer Associates, Sybase Inc., Oracle, Microsoft, Borland. Marile corporaii ale lumii, ca i foarte multe dintre cele medii sau mici, depind de peste dou decenii de SGBD, crora le sunt ncredinate funciuni critice n afaceri, precum urmrirea vnzrilor, cheltuielilor, stocurilor, ncasrilor sau plata salariilor. Dar i foarte muli oameni fac apel la SGBD pentru uzul personal, fie c este vorba de monitorizarea investiiilor familiale, fie de bd gestionnd biblioteca proprie de cri, reviste, fotografii, diapozitive, casete audio, video, discuri i CD-ROM-uri audio, video sau de date etc. Industria de SGBD genera n 1994 venituri depind 5 miliarde de dolari anual n lume, cifr mereu n cretere!
Tranzacii
Orice SGBD trebuie s asigure, n primul rnd, un limbaj de definire i manipulare a datelor, conform modelului de date suportat. Prin intermediul acestuia, se ofer utilizatorilor, n esen, posibilitatea de a memora datele structurate n bd i de a le accesa (pentru interogri i/sau actualizri). Pentru a asigura partajarea datelor n medii multi-utilizator, SGBD trebuie s ofere mecanisme de grupare a tuturor operaiilor care concur la ndeplinirea unei sarcini logice unitare ntr-o singur tranzacie, astfel nct SGBD s poat garanta ori c execuia unei tranzacii a avut loc complet, fr a fi afectat de alte tranzacii, ori c tranzacia nu a fost deloc executat (bd nefiind deci afectat de tranzacie). Tranzaciile sunt, prin urmare, singurele instruciuni logice atomice oferite de un SGBD; ca atare, ele ori se execut integral, ori deloc, n nici un caz parial, dpdv al oricrei alte tranzacii. Altfel spus, orice tranzacie parial executat (de exemplu, din cauza unei cderi de tensiune) trebuie abortat, iar toate efectele ei trebuie ignorate (rolled back). n caz contrar, n mod evident, ar putea rezulta stri inconsistente ale bd. Exemplul 9.1
De exemplu, dac o tranzacie mrete salariile angajailor unui departament cu 10%, iar o alta mut angajai din acel departament n alte departamente i cele dou tranzacii nu s-ar executa atomic, ci execuiile lor s-ar ntreptrunde, unii 5
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008 dintre angajaii mutai ar putea avea salariile mrite nainte de mutare iar alii nu! Pentru pstrarea consistenei datelor, ori tranzacia de mrire salarii a fost lansat prima iar cea de mutare angajai trebuie lansat dup terminarea tuturor mririlor de salarii (cu efectul c toi angajaii mutai vor avea salariile mrite), ori, invers, tranzacia de mutare angajai a fost lansat prima iar cea de mrire salarii trebuie lansat abia dup ncheierea tuturor mutrilor (cu efectul c nici unul dintre angajaii mutai nu va avea salariul mrit).
Literatura de specialitate se refer, n acest sens, la cele patru proprieti ACIDe ale tranzaciilor: Atomicitatea execuiei (ori complet, ori deloc) Consistena (sau Corectitudinea) transformrilor induse coninutului bd de ctre tranzacie Izolarea execuiei tranzaciei, care nu trebuie s fie influenat de modificrile aduse bd de ctre orice alt tranzacie concurent Durabilitatea tranzaciei, ale crei modificri produse bd la terminarea execuiei sale trebuie s fie permanente, supravieuind oricror cderi ale sistemului sau defeciuni ale suporilor de stocare a datelor. Conceptul de tranzacie i de terminare a ei (commit, n englez) joac ns un rol la fel de important n controlul concurenei, impunerea constrngerilor de integritate, salvarea datelor i recuperarea din erori, aa cum vom vedea n continuare. Capitolele urmtoare discut despre problemele de implementare ale principalelor componente i funcii ale oricrui SGBD, indiferent de arhitectur sau de modelul suport al datelor, i anume despre: controlul accesului concurent; securitate; integritate; indexuri; optimizare; cataloage; interfee de programarea aplicaiilor (API); unelte utilitare. De remarcat ns c, pe lng toate aceste probleme clasice ce apar n implementarea SGBD, ca n mai toate domeniile (poate doar cu o vitez mult mai mare) i aceast industrie trebuie permanent s se adapteze att la noile cerine ale utilizatorilor, ct i la avansurile tehnologice hard i soft. Considerm c cele mai semnificative tendine ce se manifest azi n industria SGBD sunt urmtoarele: arhitecturile client / server mediile de calcul deschise, distribuite sistemele multiprocesor, cu procesare paralel conceptualizarea orientat obiect integrarea n Internet.
Dei toate acestea depesc cadrul fixat pentru prezenta lucrare, considerm totui util mcar o trecere sumar n revist a lor n continuarea acestui capitol introductiv al ultimei pri.
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
considerente de amortizare a investiiilor uriae fcute n echipamente i programe, sau din conservatorism, ci i datorit faptului c prelucrarea batch este n continuare cea mai potrivit pentru aplicaiile de mai lung durat (tip liste de salarii, de stocuri etc.), intensive, ce nu necesit interaciune n timp real i care deci se preteaz la execuia n afara orelor de program ale majoritii utilizatorilor (exemplu: noaptea), cnd resursele sistemului de calcul ar fi, altfel, aproape nefolosite. on-line (asisten decizii, procesare tranzacii n timp real), rulau pe platforme mini (tipic DEC, sub RSX, VMS sau Unix), oferind acces multiutilizator, multiproces, de la mai multe terminale conectate la sistemul de calcul. Acest tip de SGBD este nc majoritar n lume, fiind n continuare folosit de mai toate marile corporaii, de la bnci la uzine, tendina fiind ns de evoluie spre arhitecturi deschise, client / server. Apariia PC-urilor, foarte ieftine i exploziv mai performante an dup an, oferind afiaj n culori, o grafic net superioar, icoane, mouse i lucru n ferestre accesibile nu doar programatorilor de calculatoare, a avut rapid un impact uria i asupra industriei SGBD, ducnd n foarte multe companii (mai ales mici i mijlocii) la desfiinarea departamentelor informatice, la descentralizarea total a procesrii datelor i la angrenarea nespecialitilor n programare n preluarea controlului direct asupra gestiunii datelor. Acestui pionierat n domeniu, nti sub CP/M, apoi DOS i Windows, i-au corespuns SGBD-uri de tip dBase. Foarte repede i nu doar din dorina de a utiliza n comun periferice scumpe (discuri hard de mare capacitate, imprimante laser, scanner, CD-ROM etc.) sau de a comunica ntre PC-uri prin mesaje i pot electronic, ci mai ales pentru integrarea bd, eliminarea redundanelor i accesul partajat la date, PC-urile au fost interconectate nti n reele locale de calculatoare (LAN) i apoi n reele regionale (WAN). n special sub Novell Netware, apoi i sub Windows NT, Windows 95, SunSoft sau Banyan, piaa de SGBD corespunztoare a fost i este nc dominat de FoxPro, Access i Paradox. Acestea pot fi configurate att pentru lucru local, individual, pe un singur PC neconectat n reea, ct i pentru lucrul n reea. Tipic, n acest din urm caz, unul sau mai multe calculatoare din reea sunt configurate ca server, iniial dedicat (de date i/sau de imprimare) iar celelalte drept, clieni cuplai iniial, la un moment dat, la un singur server de date i eventual la unul de imprimare. Ulterior, aceste arhitecturi arborescente iniiale au fost nlocuite cu arhitecturi mai flexibile (punct la punct) n care orice PC poate fi cuplat simultan la orice alt PC, cci fiecare PC poate fi configurat att server ct i client. Necesitatea de a factoriza datele comune ale unei companii i de a asigura accesul rapid la ele, n condiiile n care volumul i structura acestora sunt foarte mari, a condus la apariia de servere SGBD, n general rulnd pe un PC foarte puternic sau, mai ales, pe minicalculatoare, la care sunt cuplate clieni PC ntr-o arhitectur client / server. La un asemenea server (Oracle, Sybase, DB/2, OpenIngres, MS SQL Server etc.), oferind tipic bd relaionale accesabile n SQL (Structured Query Language, Limbaj Structurat de Interogare) sunt cuplabile LAN-uri heterogene din punct de vedere al sistemului de operare n reea i SGBD utilizat (de la Paradox 3.5 sub Novell, la Internet Explorer sub Windows95!). Principalele probleme de implementare relative la arhitecturile client / server sunt legate de: suport pentru diferite interfee de reea unelte i aplicaii de interfa utilizator (front-end) pe calculatoarele client pentru cuplarea la server mecanisme de monitorizare i optimizare a traficului n reea.
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Principalul mecanism prin care este implementat transparena localizrii este includerea n numele global (systemwide name) al oricrui obiect aflat n gestiunea bd distribuite a locului naterii obiectului, deci a locaiei unde a fost creat iniial, i meninerea informaiilor despre obiect, pe toat durata existenei sale, de ctre SGBD al locului su de natere. Dac un obiect este mutat la o alt locaie, el este luat n eviden i de SGBD al noii locaii (i scos din evidena locului de unde s-a mutat, dac acesta nu este locul su de natere, ntocmai cum procedeaz Birourile de evidena populaiei sau Comisariatele militare!), dar SGBD de la locul naterii memoreaz automat un pointer ctre noua locaie a obiectului (sau l modific pe cel vechi). n fine, bd distribuite permit natural creterea incremental prin adugarea de noi noduri pe msur ce cerinele o impun. De cele mai multe ori, aceast soluie este, de departe, mult mai bun dect upgrade-ul vreunui server existent (ce nu ar putea s nu perturbe mcar o vreme utilizatorii locali ai acelui nod).
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Exist trei tipuri fundamentale de arhitecturi hardware multi-procesor (unele platforme comercializate oferind ns i combinaii ntre aceste arhitecturi), clasificate n funcie de resursele partajate de procesoare, fiecare dintre acestea cu avantajele i dezavantajele sale: nimic partajat; discuri partajate; memorie partajat (prin intermediul creia i discurile sunt partajate!).
Arhitecturi fr partajare
Arhitecturile fr partajare implic memorie, discuri, copii de sisteme de operare i SGBD distincte pentru fiecare procesor n parte. Ele formeaz baza sistemelor de procesare paralel masiv, utiliznd deja mii de procesoare ieftine per platform. Avantajul cel mai mare este c scalabilitatea e aproape liniar (adic performanele hardware ale sistemului cresc aproape proporional cu cele ale fiecrui nou procesor instalat). Principalul dezavantaj este ns acela c, software, ncrcarea echilibrat a procesoarelor este foarte greu de realizat (mai ales atunci cnd tranzaciile acceseaz des multe date comune, ceea ce are ca efect imposibilitatea unei partiionri simetrice a datelor i, deci, suprancrcarea unui procesor i nefolosirea celorlalte la puterea lor). n plus, la orice adugare a unui nou procesor datele trebuie repartiionate, iar sistemul de operare trebuie s suporte un trafic de mesaje greu pentru unica comunicaie posibil, cea interprocesoare. De asemenea, cderea unui procesor sau a memoriei sale au ca efect pierderea posibilitii de a mai accesa datele de pe discurile acestuia. Ca remediu, unele platforme ofer salvri interdiscuri precum i procesoare i memorii redundante, de rezerv. De notat n fine c bd distribuite pot fi considerate, n fond, echivalente unor asemenea arhitecturi multiprocesor fr partajare!
10
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
11
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
12
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
prelucrarea mai multor versiuni ale obiectelor; dei foarte important, timpul de rspuns nu este critic; interogrile sunt mai rare i foarte previzibile; concurena este mult mai mic (civa proiectani, maxim zeci); sunt necesare foarte multe unelte de lucru performante dar strict pentru specialiti n timp ce eventualele unelte pentru alte categorii de utilizatori nu prea au mare importan; n schimb, este esenial cuplarea cu un limbaj de programare orientat obiect; facilitile de securitate, recuperare din eroare, disponibilitate etc. nu sunt att de importante; n general, platformele de lucru folosite sunt doar staii de lucru (sau PC foarte performante) interconectate ntr-un LAN sau cuplate la un SGBD server ntr-o arhitectur client / server.
n esen, se poate spune c SGBD obiectuale (SGBDO) sunt o extensie a limbajelor de programare orientate obiect (LPOO) prin asigurarea persistenei (memorarea pe disc dup terminarea programelor, n locul uciderii) obiectelor i partajabilitii lor ntre utilizatori concureni. Astfel, SGBDO motenesc flexibilitatea i bogia semantic a LPOO; preul ce trebuie pltit este ns dublu: pe de-o parte, specificarea iniial a structurii bd, ca i programarea ulterioar a tranzaciilor (care se face, tipic, n C++ nu n SQL!) sunt mult mai laborioase iar pe de alta, utilizatorii SGBDO trebuie s fie mult mai buni specialiti n programarea calculatoarelor dect cei ai SGBD relaionale.
13
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Un alt tip de implementare, mai nou, este cel folosit de serverele pagin. La acestea, formatul de memorare al obiectelor este acelai pe disc i n memoria RAM; transferul ntre server i clieni se face nu la nivel de obiect ci de pagin (care, de obicei, conine mult mai multe obiecte); nu mai exist TOR, ci doar o zon a memoriei virtuale a fiecrui client n care sunt memorate pagini de obiecte; n cazul n care se ncearc accesul la un obiect inexistent n aceast memorie, SGBDO proceseaz o capcan de pagin ce are ca efect aducerea de pe server a paginii ce conine obiectul respectiv; nu se mai folosesc descriptori de obiecte, toi pointerii indicnd obiectele direct; ca atare, atunci cnd obiectele sunt mutate n alt zon a memoriei virtuale (de exemplu, ca efect al swapping-ului), pointerii spre ele trebuie actualizai corespunztor. Desigur c, pentru anumite bd (n care o pagin conine mai multe obiecte) aceast abordare este mai performant, att datorit minimizrii transferurilor client / server, ct i prin eliminarea indirectrii referinelor la obiecte prin descriptori.
Cerere de acces la obiectul O Tabela Obiectelor Rezidente (TOR) ID_X ... Descriptor_X Obiectul X
ID_Y ...
Descriptor_Y
Obiectul Y
14
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
aceast informaie n acelai segment al bd cu restul obiectului (lucru realizat de o form suprancrcat a operatorului C++ new) nainte de a copia al doilea parametru n nume. Figura 9.3 prezint un program simplu ce creeaz obiecte persistente nlnuite ale coleciei astfel definite i le afieaz. SGBDO ObjectStore deschide o bd anume (/u/guest/testdb, convenia de numire folosit conformndu-se standardului Unix); dup ce se obine de la utilizator numrul dorit de obiecte, SGBDO lanseaz o tranzacie de actualizare date (update) i se verific dac exist deja creat o rdcin (punct de intrare) pentru lista nlnuit a obiectelor coleciei; n caz contrar, se creeaz o asemenea rdcin. Dup crearea i listarea instanelor create, sunt nchise tranzacia de actualizare i bd.
Integrarea n Internet
Cea mai fascinant pagin din cte se scriu probabil n aceast perioad n domeniul tiinei calculatoarelor este probabil cea referitoare la spaiul cibernetic asociat Internet-ului. Chiar dac acest subiect depete cu mult cadrul prezentei lucrri, am dori s menionm totui cele trei provocri majore pe care considerm c Internet le adreseaz SGBD: SGBD multimedia, pentru gestiunea nu doar a datelor numerice, text i Boolene, ci i a celor audio-video; SGBD gestionnd meta-date, despre ierarhiile laticeale de date disponibile n Internet (structurare, ci de acces, eventual rezumate); mecanisme de fluidizare a traficului n reea i de garantare a accesului i optimizare a costului acestuia, n orice moment, la orice resurs de date, de la orice post de lucru conectat. Desigur c fiecare dintre acestea n parte au fost deja abordate de industria SGBD, dar nu nc sistematic i masiv n contextul Internet, care, prin complexitatea, vastitatea, lipsa de omogenitate i viteza exploziv de dezvoltare (Japonia a nceput comercializarea pe piaa sa a televizoarelor Sanyo, Mitsubishi i Sharp direct conectabile la Internet!) modific de cele mai multe ori n chip radical datele problemelor de proiectare i implementare aferente. Astfel, de exemplu, n SUA sunt deja operaionale de civa ani SGBD multimedia de tip filme la cerere (video-on-demand) prin care companii de televiziune prin cablu ofer abonailor nu doar filme preprogramate de compania respectiv, ci le permit acestora s-i aleag dintr-o bd de filme ce programe doresc fiecare s vizioneze i la ce or anume! Despre meta-date vom vorbi mai n amnunt, dar doar n contextul SGBD, n capitolul 16. La fel, despre fluidizarea traficului n reele de calculatoare, despre garantarea accesului la date i optimizarea acestuia n condiii de concuren vom discuta n urmtoarele capitole, dar, iari, din pcate, nu i n contextul Internet-ului. nc o dovad (dac mai era nevoie!) c viteza de evoluie n domeniul acesta este extraordinar o constituie lansarea recent pe pia (dup redactarea lucrrii, dar nainte de susinerea ei!) de ctre Microsoft a pachetului Office97, proiectat i realizat folosind tehnologiile Internet (format HTML, hiperlegturi, navigare Web etc.) pentru cuplarea oricrui PC la Internet, din orice component a sa, inclusiv din SGBD Access97. Principala caracteristic remarcabil a acestei noi versiuni este aceea c utilizatorii PC pot crea pagini Web coninnd imagini active ale datelor, astfel nct navigatoarele Web pot actualiza, terge sau aduga informaii. n plus, datele pot fi sincronizate prin replicare ntre calculatoarele conectate, astfel nct ultima lor versiune s fie tuturor accesibil rapid. ntr-un viitor extrem de apropiat, ntreaga planet va fi acoperit de o unic bd distribuit, plin cu PC-uri nu doar client ci i server de date! Mai mult, tehnologia Internet este, prin Office97, disponibil i n LAN (referite acum ca Intranet) fa de care nu mai exist, practic, nici o diferen!
15
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
// Fiier antet pentru clasa colecie // antete fiier I/O C++ i ObjectStore #include <iostream.h> #include < ostore/ostore.hh> class colecie public: // date membru publice int id_ob; // identificator obiect char *nume; // pointer ctre numele obiect colecie *urm_ob; // pointer ctre urmtorul obiect al coleciei // funcii (metode) membru publice colecie(const int, char*, colecie*); // constructorul de obiecte ~colecie(); // destructorul de obiecte void afieaz(); // vizualizatorul obiectelor instaniate ; // corpul funciilor membru publice // creare specificaii de tip pentru ObjectStore (obligatorii pentru toate // tipurile/clasele pentru care se cere instanierea de obiecte persistente) extern os_typespec char_type; // constructorul de noi instane ale coleciei colecie::colecie(const int num, char *nume, colecie *next) id_ob = num; urm_ob = next; // aloc spaiu pentru nume i copiaz-l int lung = strlen(nume)+1; thisnume = new(os_segment::of(this), lung, &char_type) char[lung]; strcpy(thisnume, nume); // destructorul dual colecie::~colecie() // terge spaiul alocat obiectului nume delete nume; // afieaz pe ecran informaiile despre un obiect void colecie::afieaz() cout << ID obiect: << id_ob << \t << Nume: << nume << endl;
Figura 9.2 Declaraia unei clase colecie n SGBDO ObjectStore (colecie.hh)
16
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
// Exemplu de program pentru crearea i afiarea unei colecii nlnuite de obiecte. // ObjectStore este folosit pentru asigurarea persistenei obiectelor create. #include colecie.hh os_typespec char_type(char); main() // declaraia clasei colecie
// iniializare variabile colecie *head = 0; // capul listei nlnuite de obiecte int numr = 0; // numrul de ID obiect char nume_ob[32]; // vector pentru numele obiect int total = 0; // numrul total de obiecte os_database *db1 = 0; // pointer la o bd ObjectStore os_database_root *root = 0; // pointer la o rdcin ObjectStore os_typespec col_type(colecie) objectstore::initialize(); db1 = os_database::open(/u/guest/testdb, 0, 0666); // cere numrul de obiecte dorite cout << Specificai numrul de instane dorite pentru colecie: << endl; cin >> total; OS_BEGIN_TXN(t1, 0, os_transaction::update) root = db1find_root(col_root); if (!root) root = db1create_root(col_root); head = (colecie*)rootget_value(); // creaz obiectele for (int i = 0; i < total; i++) cout << Specificai ID urmtorului obiect dorit: << endl; cin >> numr; cout << Specificai numele urmtorului obiect dorit: << endl; cin >> nume_ob; head = new(db1, 1, &col_type) colecie(numr, nume_ob, head); rootset_value(head); // afieaz toate obiectele coleciei cout << Lista tuturor obiectelor coleciei create: << endl; for (colecie* e = head; e; e = eurm_ob) eafieaz(); OS_END_TXN(t1) db1close();
17
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
18
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
de software. Mai interesant n aceast privin este ns Cooperative Development Environment (CDE) ce reprezint ncercarea Oracle de a furniza o mulime de oferte integrate care s acopere ntreg ciclul de via al dezvoltrii aplicaiilor.
19
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
(prin interfaa Ingres / Net), plus The Knowledge Manager, care asigur mecanisme de controlul integritii datelor i utilizrii resurselor. Opiunea Object Manager, orientat obiect, ofer posibilitatea definirii de tipuri de date i metode utilizator. Informaiile din aceast ultim parte se refer la versiunile curente ale tuturor acestor componente i n special la versiunea R6.4 a motorului Ingres / Star al SGBD.
20
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
2. CONTROLUL CONCURENEI
Lacte
Gestiunea accesului concurent la bd de ctre mai muli utilizatori simultan trebuie s garanteze consistena i integritatea datelor. Cel mai simplu mod de a le asigura este, evident, serializarea tranzaciilor, adic punerea ntr-o coad de ateptare a tuturor tranzaciilor i execuia lor pe rnd, una cte una (ntr-o ordine oarecare, bazat, de exemplu, pe prioriti i ordinea cronologic de lansare), pe msur ce execuia tranzaciiilor precedente se ncheie. Aceast strategie de implementare a controlului concurenei nu poate fi ns aplicat de nici un SGBD din cauza performanelor complet neacceptabile ce ar fi astfel oferite. Pentru a rezolva problema concurenei, SGBD controleaz traficul tranzaciilor folosind un mecanism de sincronizare software numit lact. Un lact este asociat unei date (structurate, de obicei rnd de tabel sau tabel ntreag) pentru a-i indica starea curent i a asista astfel sistemul n a decide dac acea dat este sau nu disponibil la un moment dat pentru un anumit tip de operaie (exemplu: modificare). Folosind lactele, SGBD ncearc mereu s asigure performane ct mai mari ale sistemului, fr a se altera datele bd (i.e. fr a se pierde actualizri, de exemplu permind unei tranzacii s rescrie sau s invalideze modificrile efectuate de o alt tranzacie). Exemplul 10.1 De exemplu, s considerm o firm cu doi asociai i un singur cont n banc. ntr-o zi, n care, de exemplu, soldul contului este de 1.000.000 lei, simultan, ambii asociai se duc fiecare la cte o alt sucursal a bncii care le gestioneaz contul, primul dorind s fac o plat prin banc de 500.000 lei, iar al doilea dorind s retrag din cont 300.000 lei. Dei este evident c, dac cele dou tranzacii sunt corect serializate, la sfritul lor soldul contului ar trebui s fie de 200.000 lei, n absena unui mecanism de control al concurenei de tipul lactelor soldul final ar putea fi incorect, de exemplu, n urmtoarea situaie: 1. Funcionarul primei sucursale citete din bd soldul de 1.000.000 al contului. 2. Funcionarul celei de-a doua sucursale citete din bd soldul de 1.000.000 al contului. 3. Funcionarul primei sucursale opereaz plata de 500.000 i scrie soldul final de 500.000 (1.000.000 - 500.000). 4. Funcionarul celei de-a doua sucursale opereaz retragerea de 300.000 i scrie soldul final de 700.000 (1.000.000 - 300.000). n acest mod, rezultatul primei tranzacii s-a pierdut, cci cea de-a doua a rescris-o! n majoritatea SGBD moderne, lactele sunt puse i scoase automat de sistem, fiind deci transparente utilizatorilor. Deoarece acest lucru nc ar putea conduce, n anumite situaii, la ineficiena sistemului, se permite i programatorilor s controleze lactele prin instruciuni dedicate de punere i scoatere a acestora. Pentru atingerea unui compromis ct mai acceptabil ntre controlul automat i cel manual, sunt practic utilizate mai multe tipuri de lacte iar datele sunt blocate cu lacte pe mai multe niveluri, aa cum se va vedea n subseciunile urmtoare.
21
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
orice alte lacte, n sensul c o tranzacie nu poate pune un asemenea lact pe nite date, dect dup scoaterea tuturor altor lacte de pe acele date. Lactele partajabile sunt compatibile ntre ele, adic orice tranzacie poate pune un asemenea lact pe nite date care mai sunt deja blocate de alte tranzacii, tot cu lacte partajabile. Figura 9.1 prezint un exemplu de control al concurenei mai multor tranzacii folosind lacte partajabile i exclusive. Diverse SGBD comerciale ofer i alte tipuri de lacte n afara acestora dou fundamentale deja discutate; cteva dintre ele vor fi trecute n revist n ultima seciune, de comentarii, a acestui capitol.
Granularitatea
Pe lng diversele tipuri de lacte oferite, SGBD asigur i diferite niveluri de control al blocrii datelor. Acestea determin granularitatea lactelor suportate de sistem, care poate varia de la o ntreag bd, la un fiier sau un articol dintr-un fiier. Diverse tipuri de lacte pot fi folosite pe diverse niveluri de granularitate.
Momente de timp t1 EVENIMENTE UTILIZATOREVENIMENTE SGBD ncepe tranzacia 1. Cerere de citire data A. Tranzacia 1 citete A. ncepe tranzacia 2. Cerere de citire data A. Tranzacia 2 citete A. ncepe tranzacia 3. Cerere de modificare A. Verific starea de blocare a lui A. Cum nici un lact nu e pus, se garanteaz un lact partajabil pentru tranzacia 1. Verific starea de blocare a lui A. A fiind blocat partajabil, se garanteaz un lact partajabil i pentru tranzacia 2. Verific starea de blocare a lui A. A fiind deja blocat (chiar dac doar partajabil!) se refuz blocarea exclusiv a lui A pentru tranzacia 3, care va trebui s atepte deblocarea A pentru a putea continua. Lactul partajabil pus asupra lui A de ea este scos (rmne ns cellalt lact!). Verific starea de blocare A. A fiind blocat partajabil, se garanteaz un lact partajabil i pentru tranzacia 4. Lactul corespunztor este scos (dar A este nc blocat de tranzacia 4!). Lactul corespunztor este scos i cum A nu mai este blocat de nici o alt tranzacie se garanteaz un lact exclusiv pentru tranzacia 3. Se scoate lactul exclusiv corespunztor, data A redevenind liber.
t2
t3
t4 t5
t6 t7
t8
22
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Raiunea de a introduce mai multe niveluri de granularitate este evident: unele tranzacii (precum cele din exemplul 9.1 de mai sus) pot avea nevoie de acces (ACID!) la mai multe date odat, n timp ce altele (precum cele din exemplul 10.1 de mai sus) au nevoie de acces (ACID!) la o singur dat. Desigur c, pentru a maximiza performanele sistemului, este important ca nivelurile de granularitate s fie bine alese i judicios folosite, astfel nct s nu se blocheze inutil date i s nu fie excesiv de multe blocri/deblocri (care adaug timp sistem). Majoritatea SGBD-urilor ofer cel puin trei niveluri de granularitate: articol fiier (rnd din tabel); pagin; fiier (tabel). Paginile de date sunt uniti de alocare a memoriei pe disc, a cror dimensiune, multiplu de 2Koct., variaz n funcie de sistemul de operare i de SGBD (tipic, ntre 2K i 64K). n general, o pagin conine un numr ntreg de articole, iar un fiier se ntinde pe mai multe pagini. n unele SGBD, o pagin poate conine articole din mai multe fiiere (cu date structural legate ntre ele). Dei paginile de date nu sunt conceptualizate de modelele de date suport ale SGBD, totui acest nivel de granularitate are sens, aa cum rezult din urmtorul exemplu: Exemplul 10.2
S presupunem c o tranzacie include o interogare ce se refer doar la articolele dintr-o pagin de date. Evident c blocarea acestei pagini doar cu un lact este preferabil att blocrii (inutile a) ntregului fiier, ct i blocrii cu cte un lact individual a tuturor articolelor paginii (soluie ce ar mri foarte mult ncrcarea sistemului).
Unele SGBD evoluate ofer n plus un mecanism automat de escalare a lactelor (sau blocare progresiv) pentru mrirea performanelor sistemului: atunci cnd un lact cu granularitate prea fin este repetat pus (ncrcnd excesiv sistemul) SGBD poate decide (dincolo de un prag setabil) c ar fi mai economic s mreasc granularitatea, nlocuind lactul cu unul mai larg (de exemplu, de la articol la pagin sau chiar la fiier). Aceast mrire progresiv a granularitii este fcut automat, fiind transparent tranzaciei implicate.
Stabilitatea cursorului
Stabilitatea cursorului impune SGBD s blocheze datele doar atta timp ct ele sunt cele curente. Atunci cnd cursorul (care indic articolul curent al fiierului din care se citete) este mutat pe alte date dect cele curent blocate, sistemul scoate automat lactul (partajabil) asociat datelor ce nu mai sunt indicate de cursor. Evident c aceast izolare a lactelor de citire este dual primeia, mrind
23
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
concurena; exist ns tranzacii pentru care ea este inaplicabil deoarece, desigur, o recitire ulterioar a acelorai date poate furniza valori diferite de citirea anterioar (cci, ntre timp, alte tranzacii au putut modifica datele respective).
Fie urmtorul scenariu de execuie a dou tranzacii T i T: Timp Eveniment SGBD t1 T obine un lact exclusiv pentru A t2 T actualizeaz A t3 T elibereaz A t4 T obine un lact exclusiv pentru A t5 T actualizeaz A t6 T se termin, elibernd A t7 T aborteaz Evident c, la prima vedere, ambele tranzacii satisfac varianta iniial a protocolului de blocare n dou faze; ns deoarece T aborteaz dup scoaterea lactului asupra lui A, SGBD este obligat s cear un lact asupra lui A (n numele T!) pentru a desface tranzacia ce a abortat, ceea ce violeaz de fapt chiar varianta iniial a protocolului (cci se cere un lact n faza a doua). Mai mult, pentru a desface T, SGBD desface implicit i T (cci A revenind la vechea valoare dinaintea actualizrii sale de ctre T, actualizarea fcut de T se pierde!), lucru ce afecteaz integritatea datelor (deoarece T terminndu-se normal nu mai este executat din nou). Rezult de aici necesitatea restriciei suplimentare de eliberare a lactelor doar la terminarea tranzaciei.
Exemplul precedent demonstreaz desigur i faptul c protocolul ce implic stabilitatea cursorului nu este serializabil (cci nu menine lactele pn la terminarea tranzaciei).
24
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Blocaje fatale
Ca n orice alt tip de control al concurenei utiliznd mecanisme de blocare i SGBD trebuie s evite o potenial problem major: blocajele fatale (deadlocks). Un asemenea blocaj poate aprea ori de cte ori fiecare dintre tranzaciile concurente la un moment dat sunt n ateptarea (circular) a alteia dintre ele. Cel mai simplu exemplu este cel cu doar dou tranzacii concurente, dintre care prima a blocat data d1 i ateapt s poat bloca i data d2, iar cea de-a doua a blocat data d2 i ateapt s poat bloca i d1. Evident c, n acest caz, nici una dintre ele nu mai poate continua vreodat, iar sistemul este blocat n mod fatal (numai o repornire a sa putnd debloca situaia, desigur cu pierderile de informaii i integritate a datelor aferente). Majoritatea SGBD vechi, trateaz aceast problem potenial oferind mecanisme de detectare a blocajelor fatale; n cazul n care se detecteaz un asemenea blocaj, sistemul l sparge abortnd una dintre tranzacii (de obicei cea care reuise s lucreze cel mai puin pn n acel moment), ceea ce permite celorlalte tranzacii s continue lucrul, urmnd ca tranzacia abortat pentru deblocare s fie apoi imediat repornit. SGBD mai performante, din noile generaii, ofer mecanisme de prevenire a blocajelor fatale: toate lactele necesare unei tranzacii la un moment dat pot fi cerute i se garanteaz sau se resping simultan, n mod atomic (n bloc). Desigur c preul evitrii apariiei blocajelor fatale n acest mod este ns reducerea concurenei. n cazul exemplului de mai sus, presupunnd c prima tranzacie a cerut i obinut blocarea simultan a datelor d1 i d2, cea de-a doua tranzacie nu le va mai putea bloca pn cnd prima nu le elibereaz. Prevenirea blocajelor fatale este fcut de SGBD prin meninerea unor grafuri de ateptare (wait-for graph) orientate: n ele sunt memorate att tranzaciile care au obinut lacte, ct i cele care sunt n ateptare deoarece au cerut lacte ce nu pot fi momentan garantate. Nodurile unui astfel de graf memoreaz identificatorii tranzaciei i ai datelor blocate sau a cror blocare e cerut, precum i tipul lactului, n timp ce orice arc orientat indic dinspre o dat blocat de o tranzacie ctre o alt tranzacie ce ateapt blocarea aceleiai date. Evident c orice bucl nchis ntr-un asemenea graf indic un blocaj fatal. Sarcina SGBD este deci de a preveni mereu nchiderea vreunei bucle.
Fie dou servere distribuite aflate la locaiile L, respectiv M. Fie o tranzacie T ce se execut la L i are nevoie la un moment dat de a actualiza nite date ale M, nainte de a putea continua execuia. SGBD L iniializeaz pentru aceasta la M o tranzacie cohort T care trebuie s actualizeze datele de acolo din partea T. S presupunem c, pentru aceasta, T are nevoie s pun un lact ce nu poate fi deocamdat garantat de SGBD M, deoarece o alt tranzacie U a blocat datele respective n prealabil. Lucrurile se complic n momentul n care i U, printr-o tranzacie cohort U, dorete s blocheze date ale L deja blocate de T! Evident c acest blocaj fatal global nu poate fi prevenit de nici unul din grafurile de ateptare de la L sau M, care nu conin nici o bucl, deoarece ele nu au cum s reprezinte arcele de la T la T, respectiv de la U la U.
O posibil soluie pentru prevenirea acestui tip de blocaje este, desigur, introducerea unui gestionar global, centralizat al lactelor, care s menin un unic graf de ateptare pentru ntreaga bd
25
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
distribuit. Dezavantajele sunt pierderea autonomiei locale i, mai ales, aglomerarea traficului n reea, plus riscurile inerente dependenei de un singur server. Cea mai interesant propunere alternativ pare cea avansat, nc din 1982, de cercettorul Ron Obermark de la IBM [271]: se extinde graful de ateptri cu un nou tip de noduri care, mpreun cu arcele aferente, s memoreze informaii de tipul tranzacia local T este n ateptarea terminrii tranzaciei cohort T pe care a iniiat-o, respectiv tranzacia cohort U este ateptat s se termine de tranzacia U ce a iniiat-o. Apariia unui asemenea tip de nod ntr-un graf de ateptare este considerat de SGBD drept un potenial de blocaj fatal global i declaneaz imediat trimiterea subgrafului de ateptare relevant celuilalt SGBD implicat; acesta, reunindu-l cu graful propriu de ateptare, poate astfel preveni apariia vreunui blocaj fatal global. Datorit implicaiilor asupra traficului de comunicaii, timpului de execuie i spaiului disc suplimentare ce ar fi necesare implementrii acestei soluii (i, mai mult, oricror alte soluii ce au mai fost propuse) nici un sistem comercial nu ofer ns practic, deocamdat, vreun remediu elegant acestei probleme: dac un asemenea blocaj apare, SGBD pur i simplu aborteaz una dintre tranzaciile implicate dup scurgerea unui interval de timp prestabilit (time out) de la blocaj!
26
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
factorizeaz ntr-un sens tipurile de blocaj concomitent posibile asupra paginilor unei tabele/spaiu i scutesc DB2 s analizeze, de fiecare dat, lactele tuturor paginilor implicate. Programatorii pot decide modul iniial de blocare folosit de sistem cu instruciunea LOCK TABLE; astfel, ei pot cere direct un lact partajabil sau exclusiv asupra oricrei tabele (pentru spaii de tabele segmentate se pot obine astfel doar lacte cu intenie partajabil, respectiv exclusiv asupra spaiului, pe lng lactul cerut asupra tabelei). Clauza LOCKSIZE a instruciunii CREATE TABLESPACE mpiedic sistemul s garanteze pentru spaiul respectiv lacte de granularitate mai fin dect cel specificat; de exemplu, LOCKSIZE OF TABLE inhib lactele de pagin i linie. Versiunea 3 permite i controlul blocrii fiierelor index prin clauza SUBPAGES a instruciunii CREATE INDEX: valorile admise pentru ea (1, 2, 4, 8 sau 16) cer sistemului partiionarea fiecrei pagini a indexului ntr-un numr corespunztor de subpagini; lactele sunt apoi cerute i garantate pe cte o subpagin. Versiunea 4 folosete indexuri de tip 2 (vezi capitolul 14) care nu mai permit blocarea utilizator a indexurilor; aceasta se face automat, numai de sistem, cu ajutorul zvoarelor. DB2 folosete stabilitatea cursorului pentru a se asigura c lactele partajabile asupra paginilor sunt inute doar atta timp ct se citete din pagina respectiv; citirile repetabile garanteaz n schimb c toate lactele de pagin puse de o tranzacie sunt meninute pn la terminarea acesteia. Versiunea 4 ofer n plus un nivel nou de izolare: citirea datelor neterminate (uncommitted read). Acesta asigur o concuren mai mare dect stabilitatea cursorului i semnific faptul c tranzacia poate citi date a cror modificare (de ctre o alt tranzacie) nu a fost nc terminat. Pentru cazurile n care programatorii nu folosesc corect instruciunile ACQUIRE/RELEASE de punere/scoatere simultan a tuturor lactelor necesare la un moment dat (ceea ce poate conduce la blocaje fatale), DB2 menine grafuri de ateptare pentru a preveni automat asemenea situaii limit; n caz de potenial blocaj, DB2 selecteaz dintre tranzaciile implicate o victim, pe care o desface, dnd-o napoi i elibereaz astfel resursele pentru celelalte tranzacii concurente.
27
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
lact silit, el nu ateapt ns pur i simplu eliberarea resursei ci semnaleaz aplicaiei o eroare (excepie); aceasta va lua msurile pe care le crede de cuviin n contextul respectiv. Opernd mai degrab la nivelul instruciunilor SQL (dect la nivelul liniilor, tabelelor sau tranzaciilor), lactele silite permit programatorilor scheme de blocare mai sofisticate dect cele automat implementate de sistem. Blocajele fatale sunt rezolvate doar prin time out (nu cu grafuri de ateptare)!
28
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
execuiei interogrii. Aceasta nseamn, n esen, dou lucruri: orict de mult ar dura execuia interogrii, ea va accesa mereu aceleai valori ale datelor cu cele care erau memorate la momentul nceperii execuiei ei; pe de alt parte ns, tranzaciile concurente pot lucra n paralel, inclusiv pentru a actualiza datele procesate de interogare. Acest model se mai numete i tehnica de interogare fr blocaje, deoarece nici cititorii nu blocheaz scriitorii i nici invers. Interogrile vd mereu date consistente (absolut consistente, nu doar relativ consistente, precum n cazul stabilitii cursorului) chiar dac acestea nu sunt cele mai recente. Implementarea acestui model este relativ simpl: ori de cte ori o tranzacie se termin, n jurnalul de actualizri corespunztor este memorat i valoarea curent a unui numr de schimbri sistem (SCN) care, apoi, este imediat incrementat; fiecare bloc de date memorat pe disc conine i valoarea SCN la momentul ultimei scrieri a datelor blocului respectiv; la momentul nceperii execuiei unei interogri, Oracle memoreaz valoarea curent a SCN; atunci cnd interogarea acceseaz un bloc de date, acesta este livrat direct dac SCN-ul su este mai mic sau egal cu cel memorat la nceputul tranzaciei; n caz contrar, Oracle reconstruiete, cu ajutorul jurnalului de actualizri, o fotografie a datelor conform cu starea lor la momentul nceperii tranzaciei. Modelul consistenei multi-versiune poate fi ns schimbat de utilizatori explicit pentru a obliga Oracle s impun consistena citirilor la nivelul tranzaciilor n locul celei de nivel instruciune. Aceasta garanteaz tuturor instruciunilor unei tranzacii (n particular, tuturor interogrilor deci) accesul la o versiune consistent a datelor, ceea ce este comparabil cu citirile repetabile. Pentru tranzaciile care scriu, este necesar n acest caz obinerea n prealabil de lacte exclusive de linii sau de tabel (interogrile componente ce doar citesc date avnd nevoie numai de lacte exclusive de linii). Acest lucru determin, desigur, o scdere a concurenei. Dac tranzaciile doar citesc (i nu au deci nevoie de nici un fel de lact exclusiv), ele pot semnala acest lucru, pentru a permite o concuren mrit, prin instruciunea SET TRANSACTION READ ONLY; ea are ca efect garantarea consistenei de ctre Oracle cu ajutorul SCN, similar ca mai sus. Controlul utilizatorilor asupra concurenei este extins i n cazul instruciunilor SELECT ... FOR UPDATE prin clauza NOWAIT; n prezena acesteia, dac sistemul nu poate garanta imediat lactul partajabil pe grupul de linii corespunztor, el nu pune tranzacia n ateptarea momentului n care acesta va putea fi garantat (ca n cazul implicit, cnd opiunea NOWAIT lipsete) ci semnaleaz tranzaciei o eroare, pe care aceasta o trateaz cum crede de cuviin. Pentru prevenirea blocajelor fatale, Oracle menine grafuri de ateptare; dac este nevoit s aleag o victim, atunci i desface doar ultima dintre instruciuni, cea care a provocat blocajul, pasndu-i un mesaj n acest sens; tranzacia n cauz poate decide s se desfac integral, sau s atepte i s rencerce apoi instruciunea. n contextul bd distribuite, eventualele blocaje globale fatale sunt rezolvate prin time out.
29
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Cerere; atunci cnd o tranzacie are de scris o pagin i nu are timp de ateptat dup tranzaciile care citesc, poate cere un asemenea lact; sistemul o va promova n capul listei de ateptare i nu va mai garanta nici un alt lact partajabil asupra paginii pn cnd tranzacia nu termin de scris. Exclusiv; nu este scos pn la sfritul tranzaciei. Lactele pentru tabele sunt de cinci tipuri: Partajabil, similar cu cel de nivel pagin. Cerere, idem. Exclusiv, idem, cu observaia c, n general, blocarea exclusiv se face doar la nivel de pagin; numai instruciunile UPDATE i DELETE ce nu refer coloane indexate necesit acest tip de lact. Intenie de partajare; folosit pentru citiri; proprietarul poate ulterior cere blocarea cu lacte partajabile a oricror pagini ale tabelei (ce i vor fi garantate, evident, doar dac ele nu sunt blocate exclusiv de vreo alt tranzacie); el este garantat interogrilor care refer att coloane indexate, ct i neindexate. Intenie de exclusivitate; folosit pentru scrieri; proprietarul poate ncerca ulterior obinerea de lacte de scriere pentru oricare pagin a tabelei (ce vor reui, desigur, doar dac paginile respective nu sunt blocate de alte tranzacii), dar i de lacte partajabile sau de actualizare; el este garantat pentru inserii, dar i pentru actualizri i tergeri dac acestea refer coloane indexate. SQL Server ncurajeaz utilizarea de lacte de pagin, pentru mrirea concurenei; dac totui o singur instruciune blocheaz mai mult de 200 de pagini ale unei tabele, sistemul escaleaz automat lactul la cel de tabel. O procedur memorat sistem permite administratorilor modificarea valorii variabilei de configuraie lock ce reprezint numrul maxim de lacte ce pot fi simultan garantate de sistem. Implicit, acesta este 5.000; maxim, el poate fi 2 miliarde! Sybase recomand utilizatorilor s estimeze c, n medie, este nevoie de cte 20 de lacte per tranzacie. Alt procedur memorat ofer administratorilor date despre toate lactele curente, incluznd identificatorii tabelelor i tranzaciilor implicate, precum i tipul lactelor. O funcie permite utilizatorilor s menin lactele partajabile asupra unei tabele pn la terminarea tranzaciei. Aceasta, coroborat cu instruciunea SET TRANSACTION ISOLATION LEVEL 3, ofer suport pentru citiri repetabile. SQL Server menine grafuri de ateptare pentru prevenirea blocajelor fatale; drept victim va fi aleas ntotdeauna (pentru a fi desfcut) tranzacia implicat ce a consumat cel mai puin timp procesor.
30
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Cu aceeai instruciune, utilizatorii pot obliga sistemul s nu atepte la infinit garantarea unui lact, ci doar n limita valorii indicat de opiunea TIMEOUT; la scurgerea acestui interval de timp, sistemul desface instruciunea curent a tranzaciei n ateptare i i semnaleaz o eroare; tranzacia o va procesa cum crede de cuviin (rencercnd instruciunea desfcut sau renunnd i desfcnduse complet). Ingres suport opional stabilitatea cursorului, dei citirile repetabile sunt implicit asumate. De asemenea, sunt prevenite blocajele fatale; victima aleas este complet desfcut, lucru memorat n jurnalul de actualizri.
31
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Jurnale de actualizri
Un jurnal de actualizri memoreaz modificrile datelor dintr-o bd; el este de obicei memorat tot pe disc dur, ntr-un fiier separat de cele ale bd (plasat adesea, pentru mrirea siguranei, pe un alt disc dect cel pe care rezid bd). Unele SGBD ofer chiar precauia meninerii cte unui jurnal oglind, copie fidel a fiecrui jurnal, memorat pe alt disc dect jurnalul original, pentru maxim securitate. Dei nu exist nici n cazul jurnalelor de actualizri vreo soluie standard, majoritatea SGBD memoreaz n aceste jurnale momentul nceperii i terminrii execuiei fiecrei tranzacii, ca i vechile i noile valori ale datelor pentru fiecare actualizare de date n parte (evident mpreun cu numele tranzaciei corespunztoare). Cum toate scrierile pe disc se fac grupat, pe zone tampon relativ mari (pentru a mri viteza prin micorarea numrului de accese la disc), n scopul mririi siguranei n exploatare unele SGBD ofer protocoale de jurnalizare nainte de scriere (write-ahead) care foreaz scrierea pe disc a nregistrrilor din jurnal nainte de actualizarea corespunztoare a datelor. Asemenea protocoale evoluate asigur astfel posibiliti de recuperare din eroare imediat, de exemplu n cazul erorii la scrierea noii valori a unei date pe disc. Majoritatea SGBD evoluate ofer i posibilitatea de jurnalizare selectiv, prin inhibarea i repornirea la cerere a jurnalizrii. Inhibarea jurnalizrii mrete sensibil viteza sistemului, cu riscul imposibilitii recuperrii automate din eroare. Ea este ns necesar nu doar n teste, ci i n cazurile n care viteza este critic (exemplu: datele prelucrate sunt imagini, care ocup foarte mult spaiu de memorare) iar riscul acceptabil.
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Jurnalizarea i salvarea permit SGBD recuperarea din eroare complet i automat prin refacerea strii bd dinaintea erorii: dup restaurarea bd cu ajutorul copiilor salvate (n cazul n care acest lucru este necesar), refacerea actualizrilor bd se poate face, trivial, parcurgnd jurnalul respectiv de la cap la coad i refcnd corespunztor datele pentru toate tranzaciile care se i terminaser; restul tranzaciilor sunt apoi repornite. Mai mult ns, jurnalizarea permite i desfacerea actualizrilor (undo) produse de tranzacii, prin parcurgerea jurnalului n sens invers i efectuarea modificrilor inverse corespunztoare (rollback) asupra datelor actualizate de tranzaciile de desfcut. Aceast facilitate, extrem de util, poate fi necesar de exemplu pentru a nltura efectele execuiei pariale ale unei tranzacii care a fost abortat (sau s-a terminat neateptat) sau chiar pe cele ale unei tranzacii care s-a executat integral dar ale crei modificri n date conduc la violarea constrngerilor de integritate ale bd.
Puncte de verificare
Aa cum am menionat mai sus, pentru a mri performanele sistemului (avnd n vedere viteza mult mai sczut a acceselor la disc n raport cu cele la memoria RAM) SGBD nu scriu pe disc fiecare actualizare imediat, ci le grupeaz, folosind zone tampon relativ mari, astfel nct actualizrile sunt de fapt memorate doar n RAM i scrise pe disc mai trziu, mai multe deodat. De exemplu, chiar n absena unui protocol de jurnalizare nainte de scriere, este posibil ca sfritul unei tranzacii s fie scris n jurnal fr ns ca ultimele actualizri (poate chiar toate!) s fie i ele scrise pe disc (acest lucru urmnd a se face ulterior, la umplerea zonei tampon corespunztoare). Pentru a scurta timpul necesar refacerii actualizrilor la recuperarea din erori, unele SGBD folosesc punctele de verificare (checkpoints): acestea sunt nregistrri n jurnalele de actualizri fcute n momente n care sistemul a forat scrierea pe disc prealabil a tuturor zonelor tampon din memorie. n caz de eroare, vor trebui evident refcute doar actualizrile ulterioare ultimului punct de verificare. Cu ct sunt mai frecvente aceste puncte de verificare, cu att mai scurt este timpul de refacere a bd; desigur ns c fiecare punct de verificare n parte ncetinete viteza de procesare a tranzaciilor. Ca atare, ele trebuie cerute sistemului de ctre administratorii si n mod regulat (de obicei la intervale fixe de timp sau imediat dup terminarea unui numr fixat de tranzacii) dar astfel nct s se optimizeze performanele globale ale sistemului. Punctele de verificare permit recuperarea din eroare automat, chiar transparent utilizatorilor, fr a face apel la copiile de salvare ale bd afectate, aa cum se poate observa din exemplul urmtor: Exemplul 11.1
S considerm scenariul propus de figura 11.1. n acest caz, pentru a recupera din eroare, sistemul trebuie s parcurg urmtorii pai: Refacerea tuturor actualizrilor fcute de tranzaciile terminate dup ultimul punct de verificare (dar, desigur, naintea cderii sistemului); referindune la figura 11.1, aceasta implic tranzaciile 1, 3 i 6. Acest lucru este necesar deoarece nu este sigur c toate actualizrile produse de aceste tranzacii au i apucat s fie scrise pe disc (ele putnd fi scrise doar n zonele tampon din memoria volatil). Ignorarea tuturor tranzaciilor terminate nainte de ultimul punct de verificare (ce garanteaz c modificrile lor au fost scrise pe disc n ntregime); este cazul tranzaciei 2 din figur.
33
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008 Desfacerea actualizrilor fcute de toate tranzaciile active n momentul cderii sistemului (tranzaciile 4 i 5 din figur); cum aceste actualizri sunt pariale, pstrarea lor ar putea lsa bd ntr-o stare inconsistent! Repornirea tranzaciilor active (4 i 5) n momentul cderii sistemului.
34
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Tranzacii 1 2 3 4 5 6 axa timpului Punct de verificare ( reprezint terminarea execuiei tranzaciei)
Figura 11.1 Un posibil scenariu necesitnd recuperarea din eroare
Cdere sistem
35
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
actualizri. Cataloagele menin i date despre punctele de verificare. Restaurarea partiiilor unui spaiu tabel se poate face i ea n paralel. Pot fi salvate / restaurate i fiiere index ca i cataloagele sistem. Pentru mrirea performanelor, se pot face i salvri pe viu (on-line), n timp ce utilizatorii acceseaz datele respective; dac acetia actualizeaz datele n timpul salvrii, acestea se zic copii spulberate (fuzzy backup), deoarece ele nu pot fi utilizate pentru restaurarea datelor dect n conjuncie cu jurnalul de actualizri (ce trebuie s aduc la zi valorile datelor modificate dup salvare). Jurnalele de actualizri (care se pot menine n dou copii, pentru sporirea siguranei) memoreaz att valorile dinaintea ct i cele de dup fiecare actualizare. Vechile jurnale pot fi arhivate (de obicei pe benzi). Exist o mulime de date VSAM distins, numit bootstrap data set, care memoreaz date despre toate jurnalele active i arhivate, coninutul lor i punctele de verificare ce le conin; ea poate fi listat la cererea administratorului bd. Suplimentar, exist i un utilitar REPAIR care corecteaz rapid datele inconsistente, pentru ocaziile n care ori e vorba de date neimportante (exemplu, de test), sau se tie c datele au fost foarte puin afectate sau atunci cnd nu este timp pentru recuperarea corect din eroare; desigur c se impun mari precauii n acest ultim caz! Preocuparea deosebit a IBM pentru protecia datelor se manifest ns de la nivelul hardware: mainile IBM (pentru care a fost gndit DB2) sunt echipate cu uniti de control a memorrii de tip 3990 Model 6, care suport att copiere extins de la distan (XRC) pentru realizarea de copii umbr (shadowing) asincrone a volumelor DASD (Direct Access Storage Device), ct i copiere punct-la-punct (peer-to-peer) de la distan (PPRC) pentru realizarea de umbre sincrone a volumelor DASD. n plus, RAMAC Array DASD furnizeaz un nalt grad de disponibilitate i toleran la erori prin folosirea tehnologiei RAID (Redundant Array of Independent Disks). Versiunea 4 a DB2 suport de asemenea partajarea datelor pe platforma de procesare paralel IBM Parallel Sysplex, pe care pot rula simultan mai multe subsisteme DB2; dac vreunul din ele devine brusc indisponibil, orice tranzacie poate comuta cererile sale de acces la un alt subsistem DB2 ce are acces la datele respective.
36
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
i ofer instruciunea RECOVER pentru recuperarea din eroare pe baza jurnalului (ce trebuie, evident, executat doar dup restaurarea manual a fiierelor afectate!). Utilitarele pentru exportul i importul datelor pot ns servi i pentru salvarea i restaurarea datelor; ele permit copii totale sau incrementale (pentru care exist i un utilitar de compactare similar MERGECOPY al IBM) ale tuturor obiectelor unei bd, sau numai toate ori doar unele dintre cele ale unui proprietar oarecare. Jurnalele ns pot fi meninute n dublu exemplar, simultan pe dou discuri diferite, pentru sporirea siguranei. Pentru un jurnal, se aloc de fapt mai multe fiiere de lungime fix ce sunt utilizate circular (cnd unul se umple, sistemul trece la urmtorul, rescriind astfel cel mai vechi scris dintre ele). Implicit, punctele de verificare sunt constituite doar de momentele n care se schimb fiierul jurnal curent cu urmtorul; utilizatorii pot ns specifica i altele, suplimentare.
37
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
38
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
4. SECURITATEA DATELOR
n foarte multe cazuri, nu toi utilizatorii bd trebuie s aib acces la orice date. Controlul accesului la date este realizat de SGBD prin posibilitatea acordrii de privilegii utilizatorilor autorizai. n general, recunoaterea acestora se face prin cte o pereche de tip (cont/utilizator, parol), administratorii bd fiind responsabili cu gestionarea privilegiilor garantate utilizatorilor autorizai.
Privilegii
Tipurile de privilegii oferite de diverse SGBD sunt foarte variate; n esen ns, ele includ dreptul de a citi date, a scrie date, a crea noi structuri de date (exemplu: bd sau tabele ntr-o bd existent) i dreptul de a executa anumite programe (utilitare). Privilegiile pot fi garantate implicit (de exemplu, administratorul unei bd poate avea automat dreptul de a crea noi tabele n bd, creatorul unei tabele s scrie i s citeasc coninutul ei etc.) sau explicit (de exemplu, administratorul unei bd poate garanta unor utilizatori dreptul de a crea tabele, altora doar pe cel de a scrie n tabelele existente, unora doar de a le citi, iar restului de utilizatori le poate interzice pn i citirea). Privilegiile sunt de obicei asociate: tuturor utilizatorilor autorizai (publicul); de exemplu, majoritatea datelor utilizate n comun de toi utilizatorii unei bd pot fi oricui accesibile n citire (i.e. datele publice, despre tranzacii bursiere, cursul valutelor, mersul trenurilor sau al avioanelor, cartea de telefon etc.); tuturor utilizatorilor dintr-un grup (definit de administratorul bd); de exemplu, toi angajaii serviciului de contabilitate al unei firme ar putea alctui un asemenea grup; privilegiile garantate grupului (de obicei de scriere/citire n anumite tabele i doar de citire n altele) sunt motenite de toi membri acestuia (acest tip de privilegiere grupat avnd, evident, dou mari avantaje: poate modela fidel organigrama firmelor i simplific munca administratorului bd); tuturor utilizatorilor sistem (administratori ai bd); de exemplu, pe lng privilegiul de a avea acces nelimitat la toate datele, acest grup sistem are i dreptul de a garanta anumitor grupuri sau utilizatori privilegiile de acces la bd, eventual i pe cel de a transmite acest drept (total sau parial) altor utilizatori; creatorilor (proprietarilor) de obiecte; de exemplu, creatorului unei tabele i se poate garanta nu doar dreptul de a scrie/citi tabela respectiv, ci i cel de a garanta la rndul lui privilegii altor utilizatori asupra tabelei sale; utilizatorilor individuali; de exemplu, unui utilizator oarecare U, i se poate garanta cu titlu individual (pe lng eventualele alte drepturi pe care le-ar avea ca membru n unul sau mai multe grupuri) dreptul de a scrie/citi (i) n tabela T. Privilegiile se pot acorda n unele SGBD doar pentru poriuni din tabele. De exemplu, orice angajat ar putea citi datele despre colegii si de colectiv, cu excepia salariului (accesibil doar efului de colectiv), fr ns a avea acces la datele despre ceilali angajai ai firmei. SGBD relaionale pot oferi asemenea privilegii pariale foarte uor prin intermediul punctelor de vedere (view) diferite asupra datelor.
39
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
disc. SGBD evoluate ofer chiar posibilitatea codificrii folosind proceduri de criptare definite de utilizatori. Unele SGBD menin n plus dre de verificare (audit trails), jurnale n care memoreaz toate activitile din sistem (inclusiv eventualele tentative de acces neautorizat). Se pot astfel verifica utilizatorii care au modificat (poate chiar criminal!) datele sau au ncercat s violeze interdiciile de acces.
40
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
din sistemul de operare VMS al DEC (patru privilegii: citire, scriere, execuie, tergere; patru clase de utilizatori locali: administrator sistem, proprietar obiect, grup, public; i trei de utilizatori distribuii: proprietar, grup, public).
41
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Integritatea referinelor
Ca efect al propagrii cheilor, al dependenelor de incluziune sau al constrngerilor de tip sisteme de reprezentani (vezi prima parte a lucrri), multe tabele ale unei bd relaionale conin coloane de pointeri spre alte tabele sau chiar spre tabela din care fac parte (iar cum pointerii sunt folosii i de SGBD non-relaionale, problema aceasta este mult mai general). Valorile dintr-o asemenea coloan (numit i cheie strin) trebuie ntotdeauna s fie strict printre valorile unei alte coloane ce face parte dintr-o cheie a unei tabele. De exemplu, coloana Jude dintr-o tabel de Localiti ar trebui s aib mereu valori din coloana CodJude, cheie n tabela de Judee. Acest tip de constrngere se numete integritatea referinelor. Precizarea i implementarea integritii referinelor poate fi fcut automat, transparent utilizatorilor, de un SGBD evoluat (i, de exemplu, Access o i face aa). Alte SGBD cer specificarea explicit a fiecrei asemenea constrngeri odat cu (re)definirea coloanei respective, fcnd ns apoi automat impunerea lor. Sunt ns i SGBD care ofer posibilitatea alternativ de impunere a integritii referinelor i de ctre proceduri utilizator (de tip trgaci, pe care le vom discuta mai jos) sau numai astfel, fr nici un suport alternativ de impunere automat.
42
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Impunerea integritii referinelor nu este complet trivial, nici mcar n cazul actualizrii valorii pointerilor. Astfel, dac la inseria unui nou pointer sau la modificarea valorii unuia existent cu o valoare inexistent n coloana cheie referit de pointer exist soluia simpl a respingerii actualizrii respective, un SGBD evoluat ar trebui desigur s ntrebe utilizatorul dac nu cumva dorete s insereze un nou rnd n tabela referit, avnd noua valoare drept cheie, sau poate dorete s modifice una dintre valorile cheii referite n noua valoare (n loc de respingerea actualizrii, care de multe ori oblig utilizatorul s deschid i tabela referit n mod actualizare date, s insereze sau modifice n ea pentru a aduga noua valoare printre chei, nainte de a se rentoarce n tabela iniial pentru a relua operaia respins). Iar dac modificarea valorilor cheii referite poate conduce la complicaii (cci s-ar putea cere, din greeal, modificarea ntr-o alt valoare deja existent a cheii, tentativ ce trebuie respins desigur), mcar inserarea unei noi chei n tabela referit este o facilitate extrem de simplu de implementat i care economisete mult timp utilizator. n cazul actualizrii valorilor unei chei referite (de una sau mai multe coloane) prin tergerea unei valori existente, n coloanele ce refer cheia respectiv pot aprea probleme de implementare i mai mari. Astfel, dac tergerea ar fi pur i simplu permis (ceea ce se ntmpl nc, din pcate, n destule SGBD relaionale!) toi pointerii care refereau acea valoare a cheii rmn n aer, drept pentru care sunt referii ca pointeri ncurcnd lumea (dangling pointers). Desigur c cea mai simpl soluie este de a interzice orice asemenea tergere. ntr-o asemenea implementare ns, dac tergerea este uneori chiar necesar, utilizatorul va trebui nti s tearg toate referinele la acea valoare a cheii. S-ar putea deci oferi utilizatorilor posibilitatea de a opta pentru tergerea automat att a valorii cheii referite, ct i a tuturor referinelor la ea (sau nlocuirea acestora cu referine la obiectul necunoscut corespunztor). Poate nu chiar att de evident, ns cu att mai important de avut n vedere n rezolvarea acestei delicate probleme de implementare a SGBD, este faptul c i rndurile ce conin pointeri ce urmeaz a fi astfel teri pot fi, la rndul lor, referii de alte chei strine, pe oricte astfel de niveluri de recursivitate! Mai mult, ntr-un SGBD ce ar suporta printre constrngeri pe cele de tip sisteme de reprezentani (SR), cum ar fi unul construit pe baza MMED (vezi [253] i prima parte a lucrrii), s-ar putea oferi utilizatorilor i facilitatea de a reorganiza clasele de echivalen automat, inclusiv prin splitarea unei clase n mai multe noi clase (mai fine) sau, dual, prin contopirea mai multor clase ntr-una singur. Evident c asemenea operaii ridic noi probleme de implementare legate tot de faptul c, n asemenea situaii, ar fi necesar i modificarea corespunztoare a tuturor pointerilor ce refer cheile implicate (iar dac pentru contopiri acest lucru se poate face complet automat, transparent utilizatorului, n cazul splitrilor este desigur nevoie de consultarea utilizatorului pentru fiecare pointer n parte).
Trgaciuri
Oricte alte mecanisme de verificare i impunere a constrngerilor de integritate primitive ar mai oferi un SGBD, el tot trebuie s permit (pentru a putea garanta deplina consisten a bd) i impunerea de constrngeri bazate pe predicate oarecare, ad-hoc. Acest lucru este oferit de majoritatea SGBD sub forma procedurilor de tip trgaci (declanator). Un asemenea trgaci (trigger) este o procedur utilizator (scris pentru implementarea unei sau mai multor constrngeri predicative oarecare) creia i se asociaz la definire momentul n care execuia ei trebuie declanat automat de sistem. Implementrile uzuale specific pentru aceasta coloana (sau coloanele) n care, dac se ncearc scrierea unei/unor valori, SGBD apas automat pe trgaci; dac trgaciul constat c noile valori nu violeaz constrngerea pe care el o impune, SGBD va permite scrierea noilor valori; n caz contrar, scrierea este respins, iar SGBD obligat probabil s-i desfac tranzacia care a atentat astfel la integritatea bd.
43
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
bancar n altul), trebuie sczut suma transferat din contul debitor (gestionat de un SGBD1) i crescut corespunztor suma n contul creditat la distan (care este gestionat de un SGBD2). Protocolul n dou faze a terminrii trebuie s garanteze faptul c cele dou SGBD ori au efectuat ambele aceste operaii, ori nici una dintre ele. n esen, acest protocol desemneaz un SGBD drept coordonator al execuiei tranzaciei, n timp ce celelelalte SGBD implicate trebuie s acioneze doar ca participani la aceasta, supunndu-se instruciunilor SGBD coordonator. Dup ce toate instruciunile tranzaciei au fost executate (de ctre SGBD corespunztoare) terminarea tranzaciei are loc n dou faze: 1. O faz de PREPARARE a terminrii, n care coordonatorul comand participanilor s termine tranzacia, ateptnd apoi (un interval de timp finit, prestabilit) de la fiecare confirmarea posibilitii terminrii acesteia. 2. O faz de TERMINARE propriu-zis sau de ROLLBACK, n funcie de confirmrile primite de la participani. Dac toi participanii implicai au confirmat posibilitatea terminrii tranzaciei, atunci coordonatorul emite pentru fiecare n parte instruciunea de terminare a acesteia (COMMIT); dac ns vreun participant nu confirm (fie din pricina unei erori locale, sau de transmisie, sau a unei cderi complete a sistemului etc.), atunci coordonatorul emite pentru toi participanii instruciunea de desfacere a (dare napoi, anulare a efectelor) tranzaciei (ROLLBACK), astfel nct integritatea datelor s nu fie afectat. Nevoia unui asemenea protocol poate aprea att n cadrul unei unice platforme (rulnd dou sau mai multe SGBD concurente, vezi cazul platformelor paralele, dar nu doar al acestora), ct i pentru arhitecturi de platforme interconectate (la distan sau local) ale cror SGBD trebuie s coopereze. Particularitile bd distribuite complic ns mult situaia i impun rafinri ale acestui protocol. Pentru a le nelege, s analizm urmtoarele dou exemple: Exemplul 13.1
Fie un coordonator i doi participani, ambii rspunznd pozitiv (i.e., gata de terminare) la prima faz. Ca atare, coordonatorul i nscrie n jurnal instruciunea de terminare COMMIT i ncearc s o transmit i celor doi participani. Dac unul dintre ei nu mai poate fi brusc contactat (exemplu, din cauza unei ntreruperi a transmisiunilor n reea), coordonatorul va fi obligat, pentru pstrarea integritii tranzaciei, s ncerce n mod repetat transmiterea COMMIT-ului pentru server-ul inaccesibil, pn cnd va obine de la acesta confirmarea recepionrii ei. Evident c aceasta cost coordonatorul timp de execuie aproape inutil, cci integritatea datelor este asigurat deja (manipularea datelor de ctre tranzacie ncheindu-se cu bine). Dar i server-ul care nu a primit instruciunea COMMIT are de suferit, cci nici unul din eventualele lacte puse de tranzacia n cauz asupra datelor locale nu poate fi scos pn la terminarea ei: ca atare, alte tranzacii pot fi temporar (dar poate pe termen inacceptabil de lung) blocate n ateptarea eliberrii lactelor n cauz.
Pe lng complicaiile ce pot aprea ca urmare a erorilor de transmisie n reele, sunt desigur posibile oricnd i cderi de sistem ale serverelor locale, ce antreneaz i ele costuri suplimentare pentru meninerea integritii datelor i tranzaciilor.
44
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Exemplul 13.2
S presupunem exact aceeai situaie ca n exemplul 13.1, cu singura deosebire c toi participanii au primit instruciunea COMMIT, dar unul dintre ei are o cdere de sistem nainte de a apuca s o nscrie n jurnal. La repornire, dac ar considera tranzacia respectiv ca neterminat, ar trebui s o desfac nainte de a o lansa din nou, ceea ce ar viola, evident, integritatea datelor distribuite (cci tranzacia este de fapt terminat pe toate serverele). Ca atare, pentru a hotr ce tranzacii s-au terminat de fapt dintre cele aparent neterminate, SGBD repornit trebuie nti s se consulte cu coordonatorul fiecrei asemenea tranzacii n parte.
Drept urmare, pentru reducerea traficului de mesaje n reea, au fost aduse dou mbuntiri majore acestui protocol: terminarea presupus (presumed commit) i abortarea presupus (presumed abort) a tranzaciilor. n exemplul 13.1 de mai sus, atunci cnd participanii confirm coordonatorului posibilitatea terminrii tranzaciei, ei i nscriu n jurnal instruciunea de terminare presupus i pot astfel scoate toate eventualele lacte puse de tranzacie; la rndul su, la primirea tuturor confirmrilor, coordonatorul scrie i el n jurnal instruciunea de terminare presupus, iar dac nu mai poate s transmit COMMIT vreunui participant, nici nu mai ncearc acest lucru pn la restabilirea comunicaiilor cu acesta (de care va afla, la un moment dat, ori cnd va fi reapelat de acel participant, ori cnd va mai ncerca s-l contacteze pentru o alt tranzacie).
45
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
46
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
47
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Obinerea IDT ns (care trebuie s fie unic pentru orice tuplu!) nu este garantabil de ctre algoritmii talme-balme. Desigur c este posibil coliziunea unor chei, adic apariia de sinonime (i.e. valori ale cheii pentru care rutina de transformare calculeaz o aceeai valoare). De exemplu, dac o companie are 50 de angajai, identificai de numere de la 1 la 50 memorate de o cheie talme-balme ID_Ang definit, pentru economie de spaiu, ca un numr binar pe 2 octei (putnd deci identifica 65.536 posibili angajai), iar rutina alege drept numr prim pe 47, atunci cheile 1 i 48, respectiv 2 i 49, ca i 3 i 50 vor fi sinonime, producnd coliziuni n calculul IDT. Cea mai frecvent metod de rezolvare a coliziunilor este gruparea fiecrui grup de sinonime n cte o gleat (bucket): ori se aloc spaiu pentru o singur gleat mare, n care sunt memorate toate sinonimele nlnuite (pe clase de echivalen); ori se aloc spaiu fix pentru fiecare sinonim, iar cnd o asemenea gleat se umple, ori se mresc toate gleile (ceea ce ar putea conduce la mari pierderi de spaiu, cci alte glei pot rmne aproape goale), ori tuplii care ar da pe dinafar sunt memorai nlnuit ntr-o unic gleat suplimentar (ca n prima variant). n oricare dintre implementri ns, n caz de coliziune, SGBD trebuie s caute secvenial n gleata respectiv tuplul dorit (pe baza valorii cheii de cutare). Oricum, accesul de tip talme-balme este util doar n anumite cazuri particulare, pentru acces aleator la cte un tuplu rzle; pentru accesul implicnd intervale de valori ale unor chei ordonate sau pentru aplicaii ce solicit sortarea rspunsului (cresctor sau descresctor) dup valoarea unei chei, arborii B+ sunt mult mai indicai. Totui, destule SGBD nc mai ofer i chei talme-balme.
Arbori B+
Arborii B+ sunt structuri de date arborescente special proiectate pentru implementarea indexurilor n bd. Fiierul index propriu-zis este partajat ntre frunzele arborilor; fiecare frunz conine mai multe perechi formate dintr-o valoare a cheii indexate i IDT corespunztor, ordonate (de obicei cresctor) dup valoarea cheilor. Celelalte noduri (interne) ale arborelui B+, inclusiv rdcina, sunt constituite de pagini (blocuri); o asemenea pagin conine ntotdeauna maxim k valori ale cheii indexate, intercalate printre k+1 pointeri ctre nodurile fii ale paginii respective (unde naturalul k este fixat prin calcule de optimizare a vitezei de acces la date prin arbore, innd cont att de minimizarea spaiului disc ocupat de index, ct mai ales de timpul necesar reorganizrii arborelui atunci cnd se depete capacitatea de memorare a unei pagini, ca i de timpul necesar reechilibrrii arborelui n urma inserrii i tergerii de chei indexate). Figura 14.1 ofer un exemplu de asemenea arbore B+; * din frunze figureaz IDT-uri; se observ c toate nodurile interne conin succesiuni de tip (pointer1, cheie1, pointer2, cheie2, ..., pointerk+1), unde pointerii sunt figurai prin * iar semnificaia oricrui pointerj este urmtoarea: nodul fiu indicat de acest pointer este ori frunza ce memoreaz toate valorile cheii indexate cuprinse n intervalul mrginit de cheiej-1 i cheiej+1, ori o alt pagin coninnd valori ale cheii aflate n acelai interval. Dac pointerul este primul sau ultimul din nod, atunci cheiej-1 respectiv cheiej+1 sunt considerate a fi valorile cheii corespunztoare din pagina tat a celei curente (adic cea aflat imediat la stnga, respectiv imediat la dreapta pointerului care indic pagina curent; n cazul rdcinii, n mod natural, la stnga primului pointer se consider a fi valoarea minim posibil a cheii, iar la dreapta ultimului pointer, dual, se consider valoarea maxim posibil a cheii). Principala proprietate a arborilor B+ este echilibrarea: n orice moment, distana de la rdcin la orice frunz trebuie s fie aceeai. Aceasta asigur SGBD aceeai vitez de regsire a oricrei valori a indexului i expansiunea arborelui nti pe orizontal, la maxim i abia apoi cu un nou nivel pe vertical (asigurndu-se mereu numrul minim posibil de niveluri de cutare); n plus, ea previne degenerarea arborelui ntr-o list nlnuit.
48
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
* 30 * 60 * pagina rdicin
*10 * 18 *
* 36 * 43 * 51 *
* 72 * 85 *
2*4*7*8*
11 * 15 * 18 *
19 * 30 *
31 * 35 *
37 * 38 * 41 *
44 * 45 * 51 * ..
Pe lng un acces suficient de rapid la orice tuplu, fr complicaii de tip coliziune, arborii B+ sunt extrem de eficieni pentru accesul implicnd intervale de valori ale unor chei ordonate sau pentru aplicaii ce solicit sortarea rspunsului (cresctor sau descresctor) dup valoarea unei chei astfel indexate. Mai mult, el permite furnizarea rspunsului la interogrile ce implic doar coloane indexate n mod simplu, direct din fiierul index, fr a mai fi necesar consultarea tabelei corespunztoare (acelai lucru e valabil i pentru joinuri, vezi capitolul 15).
49
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Cea mai interesant generalizarea a arborilor B ni se par a fi cile de acces generalizat la date propuse de Haerder [168]. Alte texte de referin n domeniu includ, desigur, Ullman [336,337] i Date [122,123].
50
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
51
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Evident c astfel pot fi economisite foarte multe accese la a doua tabel; este trivial faptul c, pstrnd notaiile introduse n seciunea anterioar, acest algoritm, numit sort/reuniune (sort/merge), are complexitatea proporional cu n+m. Dei aparent el este, ca atare, ntotdeauna mai bun dect primul (n+m < n*m, n,m naturali!), nu trebuie ns uitat c acest algoritm presupune sortarea ambelor coloane de join. Dac ele sunt deja sortate, aceast implementare este ntotdeauna preferat; n anumite condiii, chiar atunci cnd ele nu sunt sortate dar exist cte un index pentru fiecare, ea rmne cea mai bun soluie. Dac ns cele dou coloane nu sunt sortate, atunci SGBD trebuie s le sorteze n prealabil i acest cost suplimentar poate face aceast metod mai scump dect altele. n cazul tabelelor mari n care reuesc multe comparaii (i.e. sunt gsite multe egaliti i, deci, rezultatul joinului va avea multe linii), sort/reuniune rmne ns cea mai bun, chiar dac cele dou coloane trebuie nti sortate.
52
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Pentru aceasta, se proiecteaz nti una din tabele, de la locaia A (de regul, cea mai mic dintre ele, dac nu intervin alte considerente, vezi seciunea 15.6) pe coloana join, mpreun cu IDT (adresa tuplilor respectivi); tabela cu doar dou coloane rezultat al proieciei este mutat pe cellalt server B, unde se face un prim join ntre ea i cea de-a doua tabel; astfel sunt eliminate liniile ce nu trebuie transmise (cci nu iau parte efectiv la join). Se poate cere acum transmiterea de la A la B doar a acelor linii care sunt necesare, folosind IDT al acestora; n final, se poate calcula pe A join-ul cerut. Este evident faptul c reducerea costurilor de transfer a datelor astfel obinut poate fi considerabil, n special pentru tabele mari.
53
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
4. Combin cascadele de selecii i proiecii ntr-o singur selecie, o singur proiecie sau o selecie urmat de o proiecie. 5. Partiioneaz nodurile arborelui astfel rezultat n grupuri, dup cum urmeaz: fiecare nod interior reprezentnd un operator binar (produs, reuniune sau diferen) formeaz un grup ce mai conine toate nodurile strmoi adiacente reprezentnd operaii unare (selecii sau proiecii), precum i orice lanuri de descendeni unari ce se termin cu o frunz, cu excepia cazului n care operatorul binar e un produs cartezian ce nu este urmat de nici o selecie cu care s se poat combina pentru a se transforma n join. 6. Evalueaz grupurile independent unul de altul, cu singura restricie c nici un grup nu poate fi evaluat nainte de vreun grup descendent de-al su.
Folosirea mai multor fiiere index per tabel: implementarea index AND i index OR a seleciilor
Optimizatoarele SGBD moderne exploateaz i posibilitatea de a construi i menine mai mult de un fiier index per tabel, pentru mrirea performanelor implementrii operatorului relaional de selecie. Astfel, n cazul unor predicate de selecie compuse din conjuncii sau disjuncii de comparaii, existena cte unui index per comparaie permite implementarea index AND, respectiv index OR a seleciei. Exemplul 15.1
Fie o selecie asupra unei tabele T al crui predicat este o conjuncie de comparaii, fiecare din acestea implicnd cte o coloan diferit (C1 i C2) i dou constante (k1 i k2); n SQL, ea ar fi exprimat astfel: select * from T where C1 = k1 and C2 = k2 S presupunem c SGBD dispune de cte un index pentru fiecare din cele dou coloane; dac optimizatorul ar folosi doar unul dintre acetia, de exemplu cel pentru C1, ar putea selecta rapid doar toate liniile T pentru care C1 are valoarea k1; multe din acestea ns nu satisfac probabil predicatul de selecie, neavnd valoarea k2 n coloana C2 (i deci au fost inutil selectate, trebuind a fi eliminate din rspuns ntr-un al doilea pas). Folosirea concomitent a celui de-al doilea index ar putea, evident, optimiza implementarea acestei selecii.
Procesarea index AND pe care o schim n continuare presupune doi arbori B+ drept indexuri: optimizatorul scaneaz cele dou indexuri, selectnd din fiecare doar IDT ai tuplilor ce satisfac comparaia respectiv (pentru exemplu de mai sus, cei pentru care cheile index au valorile k1, respectiv k2); cei doi vectori (i.e. tabele unicoloan) de IDT astfel rezultai sunt apoi intersectai, obinndu-se n acest mod un vector ce conine doar IDT ai rspunsului cerut; pe baza sa, sunt n final citii din tabela T doar tuplii corespunztori. Evident c procesarea index OR este similar: dac predicatul seleciei din exemplul 15.1 ar fi or (n loc de and), este suficient nlocuirea interseciei cu reuniunea vectorilor de IDT.
54
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
55
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Unele SGBD ofer chiar posibilitatea influenrii directe a comportrii optimizatorului ncorporat. De exemplu, prin modificarea sau adugarea unor reguli de optimizare sau prin specificarea n interogri a unor indicaii suplimentare de optimizare obligatorie a accesului ntr-un anumit mod (de exemplu, ignornd un index). Asemenea faciliti extrem de puternice trebuie desigur folosite cu foarte mari precauii: nu doar performanele de moment ale sistemului pot avea de suferit (mpiedicnd chiar SGBD s mai poat evalua, de exemplu, interogri pentru care este obligat s foloseasc un indice care, ntre timp, a fost ters!), dar i pe termen lung, cci asemenea tranzacii pot inhiba i versiuni ulterioare mbuntite ale SGBD s optimizeze poate mult mai bine performanele sistemului (pn nu se renun la indicaiile obligatorii). n general, optimizatoarele de azi sunt att de evoluate, nct recursul la asemenea tehnici directe de control al optimizrii este practic util doar n scop didactic.
Fie trei servere distribuite la locaiile A, B i C; s considerm o tabel T cu 1.000 de linii memorat de A i o alta, T, cu 100.000 linii memorat de B; dac se cere din C un join al T cu T, aceast operaie se poate, evident, executa conform multor strategii, dintre care citm doar urmtoarele: 1. mut (copiaz) ambele tabele n C i efectueaz join-ul la C; 2. mut (copiaz) T n A, calculeaz join-ul n A i mut rezultatul n C; 3. mut (copiaz) T n B, calculeaz join-ul n B i mut rezultatul n C. Desigur c, fie i numai dpdv al cardinalitii, decizia nu este uoar: chiar dac, evident, a doua soluie poate fi eliminat ca fiind cea mai proast ntotdeauna, este greu de decis ntre prima i a treia! Astfel, dac rezultatul ar avea tot 100.000 linii, cele dou soluii sunt aproape la fel de costisitoare (prima probabil puin mai ieftin, cci, n general, rezultatul unui join are mai multe coloane dect fiecare operand n parte); dac el este mai mic, a treia variant e preferabil; dac el este mai mare, prima variant este preferabil! Dac ns se iau n calcul i costurile transmisiei, lucrurile se complic i mai mult, fiind posibil rsturnarea clasamentelor de mai sus!
Un bun optimizator ns va lua n considerare muli ali factori, printre care: ncrcarea curent a serverelor participante; performanele platformelor de calcul implicate; performanele reelelor implicate;
eventualele constrngeri administrative (exemplu, n perioade de vrf a ncrcrii locale, administratorii bd locali pot restrnge accesul la distan); constrngeri de spaiu disc disponibil;
56
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
alte costuri (de exemplu, dac timpul de rspuns nu este critic i dimpotriv, tarifele de comunicaie sunt mult mai avantajoase n anumite perioade de timp ale zilei, s-ar putea ca cea mai bun soluie pentru exemplul de mai sus s fie a doua!). Toate aceste considerente, care implic mult mai multe meta-date non-locale dect locale, depesc cu mult capacitile optimizatoarelor locale clasice i impun considerarea unor optimizatoare globale, capabile s menin statistici globale i s acceseze statisticile oricrui server participant.
Optimizarea n DB2
Optimizatorul DB2 al IBM, care a pornit de la prototipul System R, este considerat punctul forte al acestui SGBD. De exemplu, implementarea hibrid a joinului a fost proiectat pentru i utilizat prima dat n DB2; n plus, el suport index AND i index OR, ca i bucl n bucl i sort/reuniune. Mai mult, pentru a-i ajuta optimizatorul, DB2 calculeaz automat nchiderea tranzitiv a joinului: de exemplu, pentru joinul exprimat n SQL prin: select from where and el adaug automat: and Ta.C1 = Tc.C3 Utilizatorii care doresc s afle diversele variante avute n vedere de optimizator pentru evaluarea unei interogri, precum i strategia aleas n cele din urm (fr ca interpretorul s i evalueze interogarea, pentru a economisi timp!), pot invoca instruciunea EXPLAIN; efectul ei este doar memorarea datelor luate n calcul de optimizator, ca i a rezultatului deciziei acestuia ntr-o tabel PLAN_TABLE (al crui coninut, desigur, poate fi apoi interogat i a crui structur poate fi controlat i ea de utilizator, prin eliminarea unor cmpuri n cazul n care nu toate detaliile intereseaz). ncepnd cu versiunea 3, DB2 permite utilizatorilor influenarea optimizrii prin clauza OPTIMIZE FOR n ROWS a instruciunii SELECT; aceasta furnizeaz optimizatorului informaia c rezultatul interogrii respective va avea maxim n linii (dac, n realitate, ele vor fi mai multe, rspunsul va fi corect calculat totui, doar performanele evalurii putnd fi afectate). Pentru optimizarea n bd distribuite, DB2 ofer mai multe faciliti, din care se disting evidenierea n jurnale a activitilor iniiate la distan, mecanismele de citire i transmisie a datelor n blocuri mari (pn la 32 pagini cu o singur operaie de I/O) i execuia SQL static (vezi capitolul 17) de la distan. * Ta, Tb, Tc Ta.C1 = Tb.C2 Tb.C2 = Tc.C3
57
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Optimizarea n Oracle
Oracle mai suport nc optimizarea bazat pe reguli, dei s-a anunat c urmtoarele versiuni vor renuna la ea n favoarea optimizrii exclusiv bazat pe costuri. Statisticile pot fi i aici exacte sau aproximative; instruciunea EXPLAIN este i ea oferit. Utilizatorii pot influena deciziile optimizatorului, nu doar indicnd o cale de acces, ci chiar o anume implementare a joinului, sau scopul principal al optimizrii (exemplu, viteza gsirii primelor linii sau a tuturor liniilor rspunsului). Oracle este capabil de aplatizarea interogrilor, adic de recunoaterea subinterogrilor (SELECT n SELECT) ce exprim, de fapt, joinuri i de evaluarea lor ca atare (ceea ce este ntodeauna mai ieftin!); cu mici excepii ns, joinurile multitabele sunt evaluate n pai implicnd doar cte dou tabele la un moment dat.
Optimizarea n CA-OpenIngres
Optimizatorul CA-OpenIngres se bazeaz tot pe date statistice (exacte sau aproximative) i poate fi influenat de utilizatori, care pot vizualiza planurile de optimizare i strategiile de acces la date alese automat. Pentru datele cu distribuie neuniform, el poate menine statistici pentru pn la 250 valori distincte ale unei chei. Interogrile distribuite sunt optimizate i prin considerarea costurilor de transmisie i a performanelor procesor ale serverelor implicate. Joinul poate fi implementat i bucl n bucl i sort/reuniune; este implementat i aplatizarea interogrilor.
58
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
8. CATALOAGE DE META-DATE
Un catalog este un fiier sistem memornd meta-date (i.e. date despre datele memorate de bd). De exemplu, un catalog este necesar oricrui SGBD relaional pentru a memora date despre tabelele oricrei bd gestionate: nume, sinonime, data ultimei modificri, dimensiuni etc. Alte cataloage sunt necesare pentru memorarea tuturor utilizatorilor autorizai ai fiecrei bd, precum i a privilegiilor ce le sunt garantate. Cataloagele sunt automat create i gestionate de SGBD, care are permanent nevoie s le consulte (de exemplu, pentru a determina dac o tabel exist sau nu, dac un utilizator este ndreptit la un anumit tip de acces ntr-o tabel etc.). Optimizatoarele bazate pe costuri (vezi capitolul 15) au nevoie de memorarea i inerea permanent la zi a unor meta-date statistice suplimentare.
59
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Cataloagele n DB2
DB2 al IBM, de exemplu, memoreaz i statistici pentru optimizarea accesului n catalogul su unic (din mai multe tabele, dar pentru toate bd gestionate). Datele statistice meninute pentru fiecare tabel n parte includ: numrul de linii; numrul de pagini (fizice disc alocate tabelei); fiierele index definite pe coloanele tabelei; pentru fiecare index (arbori B+): adncimea arborelui; numrul de pagini frunz; numrul de valori distincte ale cheii indexate;
60
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
valorile maxime i minime ale cheii, dar i prima dintre valorile imediat sub, respectiv deasupra acestora (pentru a evita derapaje statistice atunci cnd se calculeaz numrul probabil de linii al tabelelor rspuns); distribuia valorilor pentru primele 10 valori aprnd cel mai des n cheie.
Cataloagele n Oracle
Oracle refer cataloagele drept dicionare de date. Fiecare bd are propriul catalog, memorat ntr-un segment de ncrcare (bootstrap segment) ntotdeauna alocat n spaiul de tabel SYSTEM. Printre datele statistice suplimentare gestionate de Oracle se numr cele ce pot fi asociate fiecrei instruciuni SQL; acestea includ timp total i timp procesor de execuie, numr de linii procesate, numrul de accese logice i fizice la disc etc.
Cataloagele n CA-OpenIngres
CA-OpenIngres al CA construiete i menine cte un catalog (tot din mai multe tabele) pentru fiecare bd n parte. n plus, fiind un SGBD distribuit, el menine i un catalog global, inclusiv cu date statistice, care i permite optimizarea interogrilor distribuite.
61
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
62
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
Exist ns i multe aplicaii de bd mereu previzibile i care, n plus, trebuie reexecutate frecvent (exemplu: calculul i listarea vnzrilor, salariilor, stocurilor, comenzilor etc.). Pentru a le mri viteza de execuie, SGBD evoluate ofer i SQL static, care memoreaz pe disc diversele variante posibile de acces la ele i modul de calcul al strategiei optime pentru asemenea tranzacii. Singurul dezavantaj major (dac spaiul disc suplimentar nu e o problem) al acestei faciliti este, evident, acela c tranzaciile trebuie recompilate manual ori de cte ori apar sau dispar noi indexuri. O variant intermediar ntre aceste dou abordri, care elimin i dezavantajul amintit imediat mai sus, o constituie facilitatea procedurilor memorate pe care o pun la dispoziie cteva SGBD. Acestea nu memoreaz pe disc variantele de acces i algoritmul de alegere a celei mai bune strategii pentru o tranzacie (precum SQL static), dar, pentru procedurile memorate pe disc (n fond nite subtranzacii), pstreaz n RAM aceste informaii din momentul ncrcrii acestora n memorie i pn la momentul scoaterii lor din RAM. n tot acest rstimp, orice alt tranzacie care face apel la asemenea proceduri (cu excepia celei dinti, evident), beneficiaz de precompilarea optimizrii accesului la datele implicate.
API n DB2
DB2 al IBM ofer API ncorporat, cu SQL i static i dinamic, pentru foarte multe limbaje, incluznd COBOL, C, FORTRAN, PL/1, Assembler, Ada, APL2, Prolog i IBM Basic. Versiunea 4 suport i proceduri memorate.
API n Oracle
Oracle ofer doar SQL ncorporat dinamic i Oracle Call Interface (OCI), o API de tip apeluri, pentru mai multe limbaje, incluznd C, COBOL, FORTRAN, Ada, PL/1 i Pascal.
63
Facultatea de Matematic i Informatic, Universitatea Ovidius Curs SGBD I III, 2007 - 2008
API n CA-OpenIngres
CA-OpenIngres, dei construit n esen pe baza QUEL, suport i SQL, care poate fi dinamic ncorporat n destul de multe limbaje, incluznd Ada, COBOL, C, FORTRAN, Pascal, PL/1 i Basic. De asemenea, este suportat i biblioteca Microsoft ODBC.
64