CATEGORII DOCUMENTE |
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));
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;
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;
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);
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.
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 |
Vizualizari: 1418
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved