Partiționarea tabelelor în practică Oracle

Evaluare: 5/5

Una dintre cele mai eficiente metode de îmbunătățire a performanței bazei de date este o masă de lucru și indicele de partiționare. Luați în considerare diferitele metode de partiționare și caracteristicile acestora

Crearea de tabele partiționate în Oracle

În această parte a articolului discută despre caracteristicile crearea tabelelor partiționate, următoarea discuție se axează pe traducerea caracteristicilor existente tabele mari nesektsionirovanchyh în tabele și indici partiționate și caracteristici de partiționare lucrează cu secțiuni.

Probleme rezolvate prin porționare

Înainte de a trece la împărțirea, trebuie să definească în mod clar sarcinile care trebuie rezolvate

Prima și cea mai frecventă problemă care trebuie rezolvată cu creșterea performanței este de partiționare SQL-interogare și de modificare rânduri masă de lucru DML-operații. Acest lucru se realizează prin faptul că căutarea și modificarea liniilor din tabel nu trec prin întregul tabel, și numai o parte a acesteia (în una sau mai multe secțiuni). În plus, tabelul de partiții pe secțiunea tabelului vă permite să crească viteza de procesare prin utilizarea de paralelism.

A doua provocare. care a fost utilizat pe scară largă în organizația noastră - este îndepărtarea rapidă a unui număr semnificativ de rânduri în tabele mari prin efectuarea operațiunilor trunchia secțiuni. O altă utilizare pe scară largă este de a elibera spațiul de tabelă de partiții ocupat de tabel, după ștergerea rândurilor din tabel șterge comanda. Utilizarea comenzilor Shrink (compresie de masă) sau mutare (se deplasează într-un spațiu tabelă) pentru a elibera spațiul tabelă într-o masă mare care nu poate dura împărțit o lungă perioadă de timp. În tabelele partiționate, executarea acestor instrucțiuni în cadrul unei secțiuni va fi executată mult mai repede.

Un al treilea obiect al partiționare este de a împărți o masă mare pentru piese operaționale și de arhivare. Acest lucru este eficient mai ales în cazul în care dispozitivul unei secțiuni alimentată intensiv și modificată și partea arhivată (secțiune) este mai puțin supuse schimbării, și în mod substanțial mai puține informații sunt extrase din acestea. Rândurile din tabel din secțiunea de operare poate fi în cele din urmă transferat la secțiunea arhivă, secțiunile pot fi arhivate curățate periodic.

Al patrulea obiectiv este o reducere semnificativă a concurenței pentru rândurile și indicii pe masa, inclusiv reducerea riscului de blocaje. Astfel, ca urmare a divizării unuia dintre tabele prin metoda HASH-sarcină a mai multor blocaje care apar în tabel a fost complet rezolvată.

cheie de partiționare

Următorul pas important în crearea unui tabel împărțit este de a determina cheia de partiționare. Deoarece cheia poate acționa pe o coloană de partiționare sau mai multe coloane, în raport cu valorile care ar fi fost făcute în secțiuni ale spațierea tabel. Potențialul de a crea coloane includ coloane cheie partiție tip dată (de exemplu, coloana a creat - data creării linii sau actualizate - modificări line data) pentru partiționare Range Lista și metode. Coloane număr de tip, cu un grad ridicat de valori de unicitate sunt potrivite pentru metodele de partiționare Range și Hash. Coloane cu o listă de valori fixe, potrivite pentru lista de partiționare.

În Oracle 11g posibilitatea ca o coloană cheie de partiționare pentru a utiliza un (coloana virtuală) virtuală, construită pe funcțiile în coloana reală a tabelului. coloana virtuală nu este, de fapt stocat în tabel, și de fiecare dată se calculează în funcție de acesta în timpul introducerii datelor în tabel. utilizarea generat întotdeauna ca o expresie pentru a crea o coloană virtuală. după care există o funcție efectuată pe o coloană reală a tabelului, și în plus există o propoziție obligatorie virtuală. De exemplu, PARTID generat întotdeauna AS (TO_CHAR (UPDATED, 'MM')) virtuale. Varianta de expresie o coloană scurtă virtuală PARTID AS (TO_CHAR (ÎMBUNĂTĂȚIT, 'MM')).

A se vedea care coloana din tabel permite o cerere virtuală:

Notă. La introducerea de date într-un tabel cu o coloană virtuale ar trebui să fie incluse în lista de valori și coloane de inserare, în caz contrar ar fi o eroare ORA-00947: nu este suficient de valoare.

Metode Tabelul partiționare

Partiționarea sporește eficiența tabelelor și indexurile

Cheia de partiție selectată, determină, de obicei, metodele de separare. În prezent, există următoarele metode de partiționare tabele:

  • Raza de acțiune -sektsionirovanie într-un interval de chei
  • Listă - partiționare lista cheie.
  • Hash - hash partiționare,
  • partiționare compozit.
  • partiționare interval.
  • referențial partiționare,
  • partiționarea sistem

Ultimii trei au fost pe Oracle 11 g. Cu toate acestea, ultimele două nu am găsit prea mare folos.

Metoda de partiționare Gama pentru o gamă cheie

În practica metoda de partiționare Range folosesc două tipuri de compartimentare: în funcție de intervalul de date și în intervalul de valori.

Gama de partiționare după intervalul de date

Partiționarea această metodă folosim partiționare de zi, lună și an. Partiționarea această metodă arată exemplul din tabelul schema HISTLG FIA. cheie de partiționare servește coloană actualizate (linia data de ajustare), cu secțiunile sunt secțiuni în trepte de câte o lună. Comandă pentru a crea o tabelă partiționată a crea este:

Acordați o atenție deosebită la ultima teză ENABLE ROW mișcare, care vă permite să mergeți rândurile din tabel de la secțiunea secțiunii. În absența acestei sintagme Oracle va returna o eroare. Liniile de tranziție pe secțiuni se poate întâmpla în mod automat atunci când valoarea unei chei (de exemplu, coloana actualizată din actualizarea tranzacție se modifică valoarea faptului. La care trebuie să aparțină deja la o altă secțiune) sau poate fi în mod specific, de exemplu, pentru a transfera liniile de la secțiunea principală la secțiunea arhivă prin modificarea valorilor coloanei cheie. Dacă nu specificați această frază la crearea unui tabel, pentru a se evita erorile, efectuați comanda ALTER TABLE TABLE ENABLE ROW NUME DE CIRCULAȚIE.

A se vedea secțiunea tabelului este disponibil la cerere:

O secțiune de conținut pentru:

Metoda Partiționarea valori-range RANG de

Partiționarea intervalul de valori similare partiționarea cu interval de date, numai că în loc de către cheie dată utilizată de tasta coloană, valorile numerice (de preferință, având o distribuție uniformă pe un interval de valori). Funcționează bine pentru această coloană, cu o valoare unică. Să considerăm, de exemplu, aceeași masă AIF.HISTLG mai sus împărțit printr-un interval de date. Ca coloana cheie partiție ISN folosite cu valori unice. Comanda pentru a crea masa este:

în care PARTITION BY RANGE (ISN) indică faptul că nu partiționarea RAZA cu cheie ISN partiție, secțiunea creare interval prin 1000 valori.

Creați o nouă secțiune într-o tabelă partiționată folosind metoda intervalului

De fiecare dată când creați o tabelă partiționată, există o întrebare dificilă: cum de a crea o nouă secțiune. Înainte de a Oracle 11g a avut trei opțiuni pentru a crea o nouă partiție.

UPDATE GLOBAL indexeaza Expresie oferă indicii după comanda de serviciu se Split.

A doua opțiune - pentru a crea o procedură care formează în mod automat o nouă secțiune. O astfel de procedură universală pentru secționare de zile și luni a fost dezvoltat de către noi. Această procedură începe Iov sheduler zilnic pentru secționare de zi sau de o lună de lună pentru secționare.

Aceste proceduri sunt de lucru cu succes de mai mulți ani, creând o nouă secțiune în timp util. Baza procedurii este de a prezenta tabelul ALL_TAB_PARTITIONS și comanda Split, pentru a căuta ultima secțiune a acestei secțiuni prin divizarea comanda ALTER de mai sus.

A treia opțiune (dezvoltat de către experții noștri și a fost folosit cu succes timp de mai mulți ani) - este de a crea un tabel separat cu secțiuni care sunt utilizate într-un ciclu. Prin partiționarea tabelelor pe un ciclu se referă la partiționarea, efectuate în conformitate cu două reguli. Prima regulă - tabel trebuie să conțină un număr fix de secțiuni egale cu un număr maxim de zile într-o lună (secțiunea 31), sau numărul maxim de zile pe an (366 secțiuni), sau numărul de luni într-un an (12 unități). regulei al doilea în aceeași secțiune se încadrează la anumite intervale de timp (cicluri).

În Oracle 11g, o nouă capacitate remarcabilă de a crea automat sectiuni folosind la crearea unei fraze tabel INTERVAL (această abordare se numește interval de partiționare Interval Partiționarea). Apoi, când creați o secțiune la interval Interval de date folosind fraza echipa Interval de a crea o tabelă partiționată va fi:

în cazul în care INTERVAL frază (INTERVAL „1“ LUNĂ) indică faptul că secțiunea va fi creat automat în fiecare lună (aceeași frază poate fi sub forma INTERVAL (NUMTOYMINTERVAL (1 „MONTH“). Pentru împărțirea zilelor folosite Expresie INTERVAL (INTERVAL „1“ ZIUA .), iar datele - iNTERVAL (iNTERVAL „1“ an) Atunci când secțiuni automat crearea Rază de valori ale intervalelor utilizând comanda de creare tabel interval de expresie ia forma:

în cazul în care condițiile de INTERVAL (1000) stabilește modul de creare automată prin secțiunea 1000 valori ISN.

Trebuie remarcat faptul că noile secțiuni sunt create în procesul de introducere a datelor. De asemenea, trebuie avut în vedere faptul că numele nou este creat automat secțiunea va analiza SYS_PNNNNN, de exemplu, SYS_P28981. În acest caz, atunci când împărțirea intervalului nu este necesară pentru a crea ultima secțiune valori mai mici (MAXVALUE). în caz contrar o eroare ORA-14761.

Prin urmare, în Oracle 11g în a crea de a crea o tabelă partiționată semnificativ număr mai mic de linii, precum și crearea unei noi secțiuni a Oracle are grijă de în timp util.

LISTA partiționare lista cheie

Partiționarea pe listă este utilizată, în cazul în care este posibil să specificați o anumită listă de valori discrete ale coloanei pe care se rupe în secțiuni. Partiționarea pe comanda LIST pentru a crea metoda specificată de LIST partiționare (PARTITION LISTA DE), cheia de partiționare, și numele secțiuni, care prevăd una sau mai multe valori discrete.

coloană reală partid (număr de tip) poate fi introdus în locul coloanei virtuale umplut cu liniile de intrare din tabel. Exemplul de realizare de mai sus a fost utilizată în mod eficient în tabelele cu secțiunile 366 și 12 din urmă cu curățare trunchia deoarece informațiile sunt stocate în tabele mai puțin de un an. Avantajul acestei abordări este că puteți crea noi secțiuni nu trebuie să, ca și spațiul tabelă al secțiunilor vechi lunar eliberat rapid de trunchia.

Notă. Dacă aveți nevoie pentru a șterge secțiunea spațiu tabelă, apoi utilizați fie comanda de compresie contractă și MIȘCARE (muta într-un spațiu tabelă):

Alte opțiuni standard metoda LISTA partiționare stabilite în diferite surse.

HASH partiționare Hash

Ca regulă generală, în cazul în care nu poate fi împărțit în funcție de intervalul RANGE sau LIST, apoi utilizați pe baza heshsektsionirovanie pe o funcție hash. În acest caz, rândurile din tabel sunt distribuite în mod egal între secțiunile pe baza algoritmilor de interne hashing Oracle. În acest caz, o valoare unică decât o coloană din tabel, de-a lungul căreia partiționare, o mai bună distribuție a partițiilor de date. Coloana cheie sau unic primară (e) este bun cheia hash. Oracle recomandă N numărul de secțiuni ca putere de 2, și anume N = 2,4,8,16,32, etc. În acest caz, adăugarea sau eliminarea unor secțiuni de rescriere hash determină toate datele din cealaltă secțiune. Luați în considerare tabelul de partiționare indeksnoorganizovannoy listin exemplu HASH. Scopul mesei de partiționare HASH a fost de a realiza o reducere semnificativă a numărului de încuietori care apar în acest tabel. Acest obiectiv a fost implementat cu succes în detrimentul tabelei de partiții pe 16 secțiuni (fraza Partitions 16), în cazul în care partiționare cheie realizată pe o coloană TASKISN. Comanda pentru a crea masa este:

Trebuie remarcat faptul că, dacă o cheie este utilizată ca o coloană de partiție, care au o distribuție foarte inegală a valorilor coloanei (unicitate mici), apoi aplicarea unei compartimentări hash nu este de folos. Numărul de secțiuni nu contează, deoarece toate valorile din coloana cheie „se încadrează în jos“, în una sau două secțiuni.

Notă. A se vedea dimensiunea secțiunilor din MB pe toate metodele de mai sus pot fi pentru:

partiționarea compozit

Când partiționare compozit în cadrul secțiunii sunt subsecțiuni Totuși, în versiunile anterioare Oracle 11g mixte de partiționare permise numai pe metoda RAZĂ secțiunea și metodele de HASH sau LIST la o subsecțiune. În versiunile Oracle 11g ale secțiunilor metode, sub-secțiuni au fost extins foarte mult, iar acum este posibil să se efectueze o partiționare compozit în următoarele combinații: Gama-Range, gama-Hash. Gama-List, List-Range, List-Hash sau Ust-List. Trebuie remarcat faptul că, atunci când o partiționare de date compozit sunt stocate fizic în subsecțiunile și secțiunile Payuta au acționat, doar ca containere logice.

Luați în considerare exemplul unui tabel de plăți partiționarea AIF.PAY_ORD_RECORD amestecat cu o masă de divizare în metoda secțiunilor GAMA, precum și subsecțiunea metodei LIST. Secțiunile cheie de partiționare reliefează coloana PAY_DATA (tip dată), o subsecțiune cheie de partiționare reliefează STATUS coloană (număr de tip), primind trei valori: 0. 1.2. Comandă pentru a crea o tabelă partiționată în Oracle 11g cu secționare de lună va fi:

partiționarea System (sistem de partiționare)

Introdus în Oracle 11 g și se aplică de obicei la tabele care nu pot fi compartimentate prin alte metode. În această metodă, Oracle în sine administrează, orice rând al tabelului în care să plaseze secțiunea. Pentru această metodă, trebuie doar să scrie numele secțiunilor, de exemplu, secțiunea P1, P2, RH:

A se vedea tabelul de pe secțiunea de partiție este disponibilă la cerere:

A se vedea metoda de partiționare, acesta este sistemul, disponibil la cerere:

Trebuie remarcat faptul că este necesar să se corecteze introducerea datelor în tabel, în plus față de numele tabelului, specificați numele unui alt segment, altfel va-14701 eroare ORA. De asemenea, pentru preluarea datelor rapide la cererea trebuie să specifice numele segmentului.

Notă. tabel Tabelul de partiționare pot suferi nu numai în sine, ci și indexuri pe masă. Din cauza volumului și materiale importanța indicilor de partiționare vor fi discutate în a doua parte. Acolo veți afla despre caracteristicile tranziției de la tabele non-porționat pentru tabele mari de volum partiționate, inclusiv care apar în aceste cazuri caracteristicile indicilor de comportament, declanșează, sinonime, etc. aceste tabele.

  1. Partiționarea sporește eficiența tabelelor și a indicilor, care să permită rezolvarea problemelor menționate la început.
  2. Un pas important este de a determina cheia de partiționare de partiționare. În Oracle 11g este posibil să se utilizeze o coloană virtuală ca cheia de partiționare. Dacă nu puteți identifica cheia de partiționare ar trebui să ia în considerare folosind metoda HASH sau partiție de sistem.
  3. Alegerea metodei de partiționare este determinată în mare măsură de alegerea cheii de partiționare, precum și numărul de metode de partiționare extins foarte mult în Oracle 11g.
  4. Punctul important este de a alege abordarea tabelul de partiții la crearea unei noi secțiuni. Articolul propune trei abordări: dezvoltarea procedurilor pentru crearea automată a secțiunilor rula periodic de locuri de muncă, următoarea abordare - este de a utiliza împărțirea ciclului sau partiționarea intervalului.
  5. Partiționarea tabelul permite, în plus față de divizarea tabelului în secțiuni pentru a crea în interiorul secțiunii are o subsecțiune cu un număr de combinații Oracle tehnici 11g secțiune subsectiunea extins foarte mult.

Discutați despre acest articol