Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Clustere

sql



+ Font mai mare | - Font mai mic



Clustere

1 Clusterul de index



Clusterul (grupul de tabele), uneori numit si clusterul de index, reprezinta o metoda optionala de stocare a datelor tabelelor. Tabelele care sunt accesate frecvent impreuna pot fi stocate fizic impreuna in aceleasi blocuri de date. Tabelele dintr-un grup sunt stocate impreuna pentru a reduce numarul de operatii de I/O cu discul. Cu alte cuvinte, clusterul de index este o regrupare fizica a doua sau mai multe tabele, relativ la una sau mai multe coloane, cu scopul cresterii performantelor.

Cheia unui cluster este definita ca fiind coloana sau coloanele pe care tabelele grupate le au in comun. Cheia unui cluster nu trebuie confundata cu cheia primara a tabelelor grupate. Cheia clusterului poate fi si cheia unuia sau mai multora dintre tabelele grupate, dar acest lucru nu este obligatoriu. Valorile cheii clusterului sunt stocate o singura data in schema, reducandu-se astfel spatiul de stocare necesar si procesarile suplimentare. Randurile care au aceeasi valoare pentru cheia clusterului sunt stocate de catre Oracle in acelasi bloc de date.

Asa cum s-a discutat mai devreme, operatiile de I/O cu discul sunt efectuate de catre Oracle la nivel de bloc, nu la nivel de rand; daca datele sunt stocate impreuna, ele vor fi copiate de pe disc in memorie in cadrul aceluiasi bloc. Cand blocul de date este citit, sunt citite toate datele din tabelele clusterului din blocul de date. Acest lucru poate reprezenta un avantaj real daca datele din tabelele clusterului se folosesc impreuna in mod frecvent. De exemplu, folosirea clusterelor este benefica in cazul jonctiunilor pentru ca toate datele sunt citite in cadrul aceleiasi operatii de I/O. Daca clusterul este insa utilizat pentru tabele actualizate sau sterse in mod frecvent, se va inregistra o scadere a performantelor.

Clusterul este un mecanism transparent aplicatiilor ce utilizeaza tabelele acestuia. Datele din tabele sunt manipulate ca si cand acestea ar fi stocate intr-un tabel normal numai ca in momentul interogarii se va observa o crestere semnificativa a performantelor.

2 Crearea clusterului de index

Pentru a crea un tabel intr-un cluster de index se parcurg in mod obligatoriu urmatorii pasi:

Crearea clusterului de index

Adaugarea tabelelor la cluster

Crearea indexului de cluster

Adaugarea tabelelor la cluster se poate face si dupa ce indexul de cluster a fost creat.

Crearea clusterului de index

Pentru crearea clusterelor de index se foloseste comanda SQL CREATE CLUSTER in care trebuie specificata coloana sau grupul de coloane dupa care sunt grupate tabelele. O sintaxa simplificata a comenzii create clusteR este prezentata in continuare:

CREATE CLUSTER nume_cluster

(nume_coloana tip_data [, nume_coloana tip_data] )

PCTFREE intreg] [PCTUSED intreg]

SIZE intreg]

TABLESPACE spatiu_tabel]

STORAGE parametrii_de_stocare]

unde clauza optionala SIZE specifica spatiul (in bytes, Kbytes sau Mbytes) folosit pentru a stoca toate randurile avand aceeasi valoare pentru cheia clusterului. Aceasta valoare nu trebuie sa depaseasca marimea unui bloc de date. Daca se omite aceasta optiune, Oracle rezerva un bloc de date pentru fiecare valoarea a cheii.

Exemplul urmator creeaza un cluster sal_dept, in care tabele sunt grupate dupa coloanele cod_dept si cod_tara

CREATE CLUSTER sal_dept

(cod_dept NUMBER(10),

cod_tara NUMBER(10));

Adaugarea tabelelor la cluster

Dupa crearea clusterului, adaugarea tabelelor la cluster se face folosind comanda CREATE TABLE cu clauza CLUSTER

CREATE TABLE nume_cluster

(nume_coloana tip_data [, nume_coloana tip_data ] )

CLUSTER nume_cluster

CREATE TABLE departament

(cod_dept NUMBER(10),

cod_tara NUMBER(10),

nume_dept VARCHAR2(10),

PRIMARY KEY(cod_dept, cod_tara))

CLUSTER sal_dept(cod_dept, cod_tara);

CREATE TABLE salariat

(cod_salariat NUMBER(10) PRIMARY KEY,

nume VARCHAR2(10) NOT NULL,

prenume VARCHAR2(10),

data_nastere DATE,

salariu NUMBER(10),

cod_dept NUMBER(10),

cod_tara NUMBER(10),

FOREIGN KEY(cod_dept, cod_tara) REFERENCES departament(cod_dept, cod_tara))

CLUSTER sal_dept(cod_dept, cod_tara);

Datorita faptului ca tabelele clusterului folosesc alocarea de spatiu a acestuia, la folosirea comenzii CREATE TABLE cu optiunea CLUSTER nu trebuie specificati parametrii PCTFREE, PCTUSED si nici optiunea TABLESPACE sau parametrii de stocare.

Nu se poate asocia un cluster pentru un tabel care exista deja. Daca se doreste totusi acest lucru, se creeaza un nou tabel ce va fi grupat in cluster si care va contine inregistrarile tabelului existent (folosind optiunea AS SELECT). Tabelul vechi se sterge iar cel nou va fi redenumit cu numele celui vechi.

Index de cluster

Pentru coloanele cheie ale clusterului trebuie creat in mod explicit un index de cluster (index de grup). Indexul este utilizat pentru localizarea univoca a liniilor. Indexul de cluster trebuie creat inaintea efectuarii oricarei operatii de interogare sau DML asupra clusterului. Deci, indexul de cluster trebuie creat inainte de incarcarea datelor in tabelele clusterului; in absenta indexului, tabelele nu pot fi utilizate.

Pentru a localiza un rand dintr-un cluster, intai este folosit indexul de cluster pentru a gasi valoarea cheii clusterului, care face referire la blocul de date asociat.

Spre deosebire de un index de tip arbore B*, un index de cluster include si valorile nule ale cheii. In plus, fiecare element din indexul de cluster contine o intrare pentru fiecare valoare a cheii, si nu o intrare pentru fiecare rand, ca un index de tip B* obisnuit.

Pentru crearea unui index de cluster se foloseste comanda SQL CREATE INDEX cu optiunea ON CLUSTER

CREATE INDEX nume_index

ON CLUSTER nume_cluster

TABLESPACE spatiu_tabel]

STORAGE parametrii_de_stocare]

PCTFREE intreg]

Urmatoarea comanda SQL creeaza indexul pentru clusterul sal_dept

CREATE INDEX sal_dept_ind

ON CLUSTER sal_dept;

3. Clusterul hash

Un alt tip de cluster pe care il ofera Oracle este clusterul hash. Spre deosebire de clusterul obisnuit, pentru a accesa o inregistrare, clusterul hash nu foloseste un index, ci o functie numerica, numita functia hash. Aceasta functie are ca parametru cheia clusterului si returneaza o anumita valoare numita valoare hash. Valoarea hash corespunde blocului de date din cluster pe care Oracle il va citi sau il va scrie pe baza comenzii executate. De exemplu in momentul in care un rand este inserat in tabel, acesta va fi stocat in functie de valoarea hash asociata. Numarul de valori hash este specificat atunci cand se creeaza clusterul. Deci, intr-un cluster hash, randurile care au aceeasi valoare hash sunt depozitate impreuna pentru a activa accesul rapid.

De exemplu, consideram un sistem de plata a telefonului in care un anumit tabel depoziteaza informatii despre numarul de telefon al fiecarui client, durata apelurilor efectuate, precum si data fiecarei convorbiri. Daca regulile de plata indica faptul ca toate apelurile efectuate de un client intr-o anumita luna vor fi facturate impreuna, puteti depozita aceste apeluri intr-un cluster hash a carui cheie este formata din coloanele ce contin numarul telefonului, anul si luna in care a avut loc convorbirea. In momentul in care acest tabel va fi interogat in vederea intocmirii facturii lunare, se va observa o crestere semnificativa a performantelor.

Un cluster hash poate fi folosit pentru a stoca unul sau mai multe tabele. Ca si in cazul unui cluster de index, pentru clusterul hash cheia poate fi alcatuita din una sau mai multe coloane.

Folosirea clusterelor hash se recomanda in special pentru tabele statice (ale caror date nu se modifica prea mult in timp) si care sunt interogate frecvent cu conditii de filtrare ce sunt egalitati care contin cheia clusterului.

Pentru a gasi sau stoca un rand intr-un tabel indexat sau intr-un cluster obisnuit sunt necesare cel putin doua operatii de I/O (de obicei chiar mai multe): una sau mai multe pentru a afla sau stoca valoarea cheii si alta pentru a citi sau scrie randul in tabel sau cluster. In contrast, Oracle foloseste functia hash pentru a localiza randul intr-un cluster hash (pentru aceasta nu este necesara nici o operatie de I/O). Ca rezultat, pentru a citi sau a scrie un rand intr-un cluster hash este necesara doar o operatie de I/O.

4 Crearea clusterului hash

Pentru a crea un cluster hash se parcurg urmatorii pasi:

Crearea clusterului hash

Adaugarea tabelului la cluster

Crearea clusterului hash

Pentru crearea clusterelor hash se foloseste comanda SQL CREATE CLUSTER cu clauza HASHKEYS. O sintaxa simplificata a acestei comenzi este prezentata in continuare:

CREATE CLUSTER nume_cluster

(nume_coloana tip_data [, nume_coloana tip_data} )

HASHKEYS intreg

HASH IS expresie]

SIZE intreg]

PCTFREE intreg] [PCTUSED intreg]

TABLESPACE spatiu_tabel]

STORAGE parametrii_de_stocare]

unde:

Clauza HASHKEYS specifica faptul ca clusterul ce urmeaza a fi creat este de tip hash si furnizeaza numarul de valori hash distincte ce pot fi returnate de functia hash. Valoarea minima a numarului de valori distincte este 2. De fapt Oracle rotunjeste numarul specificat in aceasta clauza la primul numar prim mai mare decat valoarea specificata. De exemplu, daca acest numar furnizat de clauza HASHKEYS este 100, inseamna ca pentru orice valoare pe care o are cheia clusterului functia hash va returna o valoare intre 0 si 100 (adica vor fi 101 valori hash). Daca clauza HASHKEY lipseste Oracle va crea implicit un cluster de index.

HASH IS specifica o expresie ce va fi utilizata de functia hash a clusterului. Functia hash va reprezenta restul impartirii valorii aceste expresii la valoarea specificata de HASHKEYS (expresie MOD valori_hash). Valorile expresiei specificate trebuie sa fie valori numerice fara zecimale (intregi) si uniform distribuite pe domeniul acesteia. Daca acest lucru nu este posibil, atunci clauza HASH IS nu trebuie folosita, caz in care Oracle va folosi implicit o functie hash interna. De obicei acesta clauza se foloseste atunci cand cheia clusterului este formata dintr-o singura coloana care ia valori intregi uniform distribuite (vezi exemplul de mai jos).

SIZE specifica spatiul (in bytes, Kbytes sau Mbytes) folosit pentru a stoca toate randurile avand aceeasi valoare pentru functia hash. Aceasta valoare nu trebuie sa depaseasca marimea unui bloc de date. De exemplu, daca spatiul disponibil dintr-un bloc este de 1700 bytes iar valoarea specificata de SIZE este de 500 bytes, atunci unui bloc ii vor reveni 3 valori hash. Daca se omite aceasta optiune, Oracle rezerva un bloc de date pentru fiecare valoarea a functiei hash.

CREATE CLUSTER test_cls(cod NUMBER(5))

HASHKEYS 1000

HASH IS cod

SIZE 500;

Adaugarea tabelului la cluster

Dupa crearea clusterului hash, adaugarea tabelului sau tabelelor la cluster se face folosind comanda CREATE TABLE cu clauza CLUSTER. Aceasta operatie este identica cu operatia de adaugare unui tabel la un cluster de index, de aceea nu necesita lamuriri suplimentare.

CREATE TABLE test

(cod NUMBER(5) PRIMARY KEY,

CLUSTER test_cls(cod);

5 Modificarea clusterelor

Comanda ALTER CLUSTER poate fi folosita pentru a modifica parametrii de stocare ai clusterului (PCTFREE PCTUSED si parametrii din clauza STORAGE). Tot cu aceasta comanda se poate realiza alocarea si dealocarea spatiului aferent unui cluster. In cazul unui cluster hash nu se poate schimba valoarea parametrului SIZE, precum si HASH IS sau HASHKEY. Comanda ALTER CLUSTER urmeaza aceeasi sintaxa ca si in cazul modificarii tabelelor.

6 Distrugerea clusterelor

Pentru distrugerea unui cluster se foloseste comanda SQL DROP CLUSTER

DROP CLUSTER sal_dept;

Totusi, folosind comanda de mai sus clusterul nu poate fi distrus daca exista tabele in el. Pentru a permite acest lucru se foloseste clauza optionala INCLUDING TABLES

DROP CLUSTER sal_dept

INCLUDING TABLES

In plus, daca exista tabele din afara clusterului care contin restrictii de integritate care se refera la chei din tabele clusterului, acestea trebuie de asemenea eliminate. Pentru acest lucru se foloseste clauza optionala CASCADE CONSTRAINTS

DROP CLUSTER sal_dept

INCLUDING TABLES CASCADE CONSTRAINTS



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1433
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved