Virtualni indexi (NOSEGMENT index)
March 31, 2009 – DejanKada 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
3 Responses to “Virtualni indexi (NOSEGMENT index)”
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
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
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