Virtualni indexi (NOSEGMENT index)

Tuesday, 31.03.2009 – Dejan

Kada radite na optimizaciji nekog SQL upita (performance tuning), često možete uočiti da se radi full table scan nad tabelom ili da se postojeći indexi ne koriste (ignorisani su). U tom slučaju odmah razmišljate o dodavanju još jednog indexa na dodatnim kolonama ili izmjeni postojećeg, jer vam se ne da prepravljati SQL upit.

Jedna od interesantnih stvarčica u Oracle bazi je i mogućnost kreiranja virtualnih indexa, koji ne zauzimaju fizički prostor u bazi. Virtualni indexi (NOSEGMENT indexes) su korisni u slučajevima, kada želite analizirati izvršavanje nekog SQL upita i vidjeti razliku u izvršavanju koristeći taj novi virtualni index u odnosu na tenutno (ne)postojeće indexe. Kada se uvjerite da bi korištenje indexa nad zadanim kolonama poboljšalo performanse, onda možete kreirati stvarni fizički index.

Naredba za kreiranje virtualnog indexa je:

CREATE INDEX virt_indx_blabla ON tabela(neka_kolona) NOSEGMENT;

a da bi Cost Based Optimizer uzeo u obzir te virtualne indexe, morate definisati jedan dodatni parametar na nivou trenutnog sessiona ili na nivou sistema:

ALTER SESSION SET "_use_nosegment_indexes"=true;

ili

ALTER SYSTEM SET "_use_nosegment_indexes"=true SCOPE=BOTH SID='*';

Detaljnije informacije o virtualnim indexima možete pronaći u dokumentaciji, a ja ću vam dati i jedan link ka odličnom objašnjenju na engleskom jeziku: Introduction to Fake / Virtual / NOSEGMENT Indexes

  1. 3 Responses to “Virtualni indexi (NOSEGMENT index)”

  2. Moram priznat da nisam detaljno proučavao navedeni feature, ali čini mi se interesantnim.

    Ono što me bode u oči je skriveni i nedokumentirani parametar “_use_nosegment_indexes” koji se ne bi smio koristiti osim ukoliko to od nas ne traži Oracle Support.

    Baš se pitam iz kojeg je razloga taj parametar nedokumentiran 🙂

    By Marko on Mar 31, 2009

  3. Ja ne stavljam taj parametar na nivou sistema, nego samo na nivou trenutnog sessiona u kojem sam kreirao taj index i u kojem analiziram izvrsavanje SQL upita sa i bez tog NOSEGMENT indexa… Inace, imam vec u bazi na nivou sistema nekoliko underscore parametara, ali su svi stavljeni prema savjetu Oracle supporta (radi se uglavnom o nekim bugovima 🙂 ).

    By Dejan on Apr 1, 2009

  4. Upravo tako, ako je po uputi Oracle supporta onda ću koristiti nedokumentirani parametar, inače ga baš i ne bi koristio na produkcijskim bazama. Očito postoji razlog zašto je to nedokumentirani parametar.

    S druge strane imam dovoljno testnih ili development baza za igranje i testirnje svakakvih parametara pa ću se tamo i poigrati sa virtualnim indeksima 😉

    By Marko on Apr 1, 2009

Post a Comment