Virtualni indexi (NOSEGMENT index)
Tuesday, 31.03.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