Îmbunătățirea performanței interogării: Partiționarea
secționare
În multe baze de date, o cantitate imensă de date este stocată în tabele. Cu cât dimensiunea tabelului este mai mare, cu atât mai mult va fi nevoie pentru ambele operații să selectați rândurile de tabele și să efectuați anumite funcții ale administratorului bazei de date. De exemplu, pentru backup și restaurare. Tabelele mari indexate au, de asemenea, indici mari, care necesită mult timp pentru ca DBMS să lucreze cu acestea.
Partiționarea este metoda de distribuire fizică a tabelelor și a indexurilor între două sau mai multe spații de tabelă, în funcție de valorile coloanelor cheie ale tabelelor, pentru a îmbunătăți performanța operațiilor de I / O. Un fragment de tabel situat într-un spațiu tabel separat. se va numi o secțiune a tabelului. Partiționarea îmbunătățește, de asemenea, eficiența backup-ului și a recuperării prin îndeplinirea acestor sarcini cu mai puține date. O secțiune separată a capitolului următor va fi dedicată discuției despre crearea spațiilor de tabelă. Pentru a înțelege acest material, este suficient să știm că acesta este un fragment predefinit numit de memorie pe unul sau mai multe discuri, care pot fi accesate în instrucțiunile SQL după nume.
În implementarea partiționării, unul dintre conceptele importante este coloana din tabel, în privința căreia DBMS va face separarea fizică a tabelului de diferite spații de tabelă de pe hard-discuri. Această coloană se numește cheia de partiție.
Sistemul DBMS Oracle suportă mai multe tipuri de partiționare. band partitioning, partiționarea hash. partiționare compuse. precum și diverse tipuri de secționări ale indicilor.
Intervalul de partiționare
Intervalul de partiție înseamnă alocarea rândurilor de tabelă în diferite spații de tabele predefinite, în funcție de valoarea cheii de partiție. Accesul la o astfel de masă, precum și la oricare alta, se realizează prin numele său și accesul la secțiunile situate în fiecare spațiu de tabel. pot fi obținute separat. De exemplu, un tabel care conține rapoartele trimestriale financiare ale unei organizații poate fi împărțit după dată, astfel încât rapoartele pentru fiecare trimestru să fie stocate într-un spațiu tabelat separat. Cu o astfel de organizare a secțiunilor, datele dintr-un singur tabel vor fi selectate pentru un singur trimestru, ceea ce va îmbunătăți eficiența bazei de date în ansamblu.
Intervalul de partiție se bazează pe ordonarea rândurilor de tabelă în secțiuni (spații de tabelă) pe baza valorii coloanelor cheie de partiție. Conceptual, tabelul, împărțit la interval, este aranjat ca în Fig. 11.2 în exemplul de mai jos. Pentru a crea tabele partiționate, utilizați comanda SQL CREATE TABLE cu clauza PARTITION. În baza de date Oracle, cheia de partiționare nu poate fi de tip LONG.
Fig. 11.2. Exemplu de partiționare în interval
Un exemplu. Luați în considerare sistemul de procesare a comenzilor. Să presupunem că există un tabel de vânzări în el. în care sunt stocate date despre numărul, ora și prețul vânzărilor pentru fiecare client. Designerul de baze de date poate folosi partiționarea după interval, și anume - pe trimestru, pentru a reprezenta acest tabel în baza de date. Să presupunem că avem patru spații de tabelă definite anterior, numite ts_01, ts_02, ts_03, ts_04. distribuite pe patru discuri, după cum se arată în figura de mai jos.
Fragmentul scriptului de mai jos definește tabelul Vânzări cu aspectul fizic al secțiunilor, ca în figura de mai sus:
Pentru a obține acces la rândurile tabelului dintr-o anumită secțiune, pentru a afla despre vânzările din al treilea trimestru, puteți utiliza comanda SELECT. după cum urmează:
După cum vedem, trebuie să specificați opțiunea PARTITION (numele secțiunii) după numele tabelului din clauza FROM.
Administratorul bazei de date poate șterge, adăuga, muta, împărți, trunchia și modifica cu ușurință secțiunile folosind comanda ALTER TABLE. De asemenea, puteți șterge o singură secțiune ștergând spațiul de masă corespunzător.
partiționarea Hash
partiționarea Hash (hash partiționare) înseamnă o distribuție uniformă a liniilor din tabel desemnate de spații de tabelă în funcție de tasta partiție. care în acest caz este șocat. Acest tip de partiționare este convenabil de a utiliza pentru rândurile în care distribuția partiție valoare-cheie este inegală sau prost grupate. În cazul în care proiectantul bazei de date decide să creeze o tabelă partiționată-hash, ar trebui să fie suficient pentru a reprezenta cu exactitate dimensiunea acestui tabel ca un hash încorporat în algoritmii de baze de date Oracle folosite pentru a calcula dimensiunea poziției liniei în pagina de baze de date fizice. Determinarea mărimii mesei nevalidă poate duce la un număr mare de coliziuni, adică pentru a lovi liniile cu valori diferite pentru aceeași cheie de pagini, ceea ce conduce la lanțurile de sprijin de preaplin și de intrare / ieșire suplimentară.
Un exemplu. Luați în considerare același tabel Vânzări. ca în exemplul anterior, și aceeași schemă (Figura 11.2) a spațiilor tabelă. Cu toate acestea, utilizăm identificarea clientului ca cheie de partiționare. Rețineți că distribuția valorilor din această coloană poate fi foarte neuniformă. Un fragment al codului SQL pentru crearea unui tabel de vânzări partiționat prin hash poate fi scris astfel:
Clauza PARTIȚIE BY HASH (s_customer_id) îi spune Oracle să partiționeze tabela prin cheia de partiție - s_customer_id. Concluziile formularului (PARTITION q01 TABLESPACE ts_01 definesc numele secțiunii st_q01 și plasarea acesteia în spațiul de tabelă corespunzător ts_01.
Componente de partiționare
O partitionare compusa este o combinatie de partitionare de gama si partitionare hash. Aceasta înseamnă că tabela este distribuită mai întâi între spațiile de tabelă în funcție de intervalul valorilor cheie ale partiției. atunci fiecare dintre secțiunile obținute ale intervalelor este împărțită în secțiuni sau subsecțiuni subordonate, iar apoi rândurile sunt distribuite uniform între secțiunile slave cu valoarea cheii hash.
Un exemplu. Luați în considerare același lucru ca în exemplul precedent, tabelul Vânzări și aceeași schemă (figura 11.2) a spațiilor tabelă. Ca cheie de partiționare pentru domeniu, utilizați data de vânzare. Ca cheie de partiționare hash, clientul este identificat. Cu toate acestea, acum fiecare secțiune a intervalului va fi împărțită într-un număr predeterminat de subsecțiuni. Un fragment al codului SQL pentru crearea tabelului de vânzări cu partiție compusă poate fi scris astfel: