Unusuable ve Invisible Indexler Uzerine

Indexler ile ilgili daha önce “İndex Kullanımı, Oluşturulması, Çeşitleri, Faydaları Üzerine” (http://www.kamilturkyilmaz.com/2012/04/08/index-kullanimi-olusturulmasi-cesitleri-faydalari-uzerine– ) diye bir yazı yazmıştım. Indexlerin unusable ve invisible özellikleri ile devam edeceğim.

Unusable indexler defaultta optimizer tarafından kullanılmayan indexlerdir. Yani unusable statüsündeki bir index normal şartlar altında (defaultta) optimizer tarafından dikkate alınmazlar. Tablolar üzerinde bulk load işlem yapacaksanız önce indexi drop create etmek yerine önce unusable sonrasında rebuild ederek eski haline alaiblirsiniz. Unusable index’ i düzeltmenin bikça tane yöntemi var, unusable olan index (veya partition index) rebuild edilebilir, index drop – create edilebilir veya her zaman mümkün olmasa da tabloyu truncate etmek indexi VALID hale getirecektir.

Unusable indexler ile ilgili SKIP_UNUSABLE_INDEXES diye bir initial parametremiz var. Bu parametrenin default değeri TRUE olarak gelmektedir.

SQL> sho parameter SKIP_UNUSABLE_INDEXES

NAME TYPE VALUE
———————————— ———– ——————————
skip_unusable_indexes boolean TRUE
SQL>

Bu değerin TRUE olması demek ;

• Tabloya yapılan her insert, update sonrasında tablodaki indexlerde update olurlar. Bu durumda unusable olan indexler gözardı edilir.
• DML işlemlerini hata almadan yapabilmemizi sağlar.
• Select sorgularında unusable indexler kullanılamazlar.

SKIP_UNUSABLE_INDEXES parametresi FALSE olduğunda bizi neler bekliyor ona bakalım ;

• Eğer tablo üzerinde unusable index varken bir DML işlemi yapılmaya çalışılırsa transaction hata alacak ve sonlanacaktır.
• Eğer optimizer tabloya gelen erişimlerde unusable olan index’ in kullanımasına karar verdi ise, select sorgusu hata alarak sonlanacaktır.

SQL> alter system set SKIP_UNUSABLE_INDEXES=FALSE ;
System altered.

Unusable index ile ilgili bikaç tane örnek yapalım ;

— Yeni bir index create ederken unusable olarak oluşturmak ;

===> create index indx1 on test_table1 (owner) unusable
Index created.

— var olan bir index’ i unusable yapmak ;

===> alter index indx2 unusable
Index altered.

— Unusable index’ in tekrar usable haline getirmek ;

===> alter index indx2 rebuild
Index altered.

— İndexlerin statüsünü sorgulamak için ;

===> column owner format a20
===> column index_name format a20
===> select owner,index_name, status, visibility
from dba_indexes where status not in (‘VALID’,’N/A’)

OWNER INDEX_NAME STATUS VISIBILITY
——————– ——————– ——– ———-
SYS INDX2 UNUSABLE VISIBLE
1 row selected.

Invisible İndexler ;

Index create ederken veya var olan bir indexinde statusunu invisible olarak değiştirebiliriz. Invisible indexlerde de aynı unusable indexlerde olduğu gibi durum bir parametreye bağlı, defaultta OPTIMIZER_USE_INVISIBLE_INDEXES parametresi FALSE olarak geliyor. Bu değerin FALSE olması demek invisible olarak set edilmiş olan indexlerin optimizer tarafından dikkate alınmamasını sağlar. Parametere session veya system seviyesinde set edilebilir. Indexlerle ilgili bir çalışma yapacağımız durumlarda örneğin oluşturacağınız bir indexin sisteme etkisini görmek için system bazında bu parametrenin değerini değiştirerek durumu diğer kullanıcılar etkilenmeden gözlemleyebilirsiniz. Yeni bir index create etmenin yanında, var olan bir indexide drop etmek istediğiniz de sisteme olan etkisini gözlemlemek için bu parametreyi kullanabilirsiniz.

Invisible indexler ile ilgili de bikaç örnek yapalım ;

— Yeni bir index create ederken invisible yapmak ;

===> create index indx3 on test_table1 (tablespace_name) invisible unusable parallel
Index created.

— var olan bir indexi invisible hale getirmek ;

===> alter index indx4 invisible
Index altered.

— invisible bir indexi visible yapmak ;

===> alter index indx4 visible
Index altered.

Son durumu select etmek için aynı scripti kullanabiliriz;

===> column owner format a20
===> column index_name format a20
===> select owner,index_name, status, visibility
from dba_indexes where status not in (‘VALID’,’N/A’)

OWNER INDEX_NAME STATUS VISIBILITY
——————– ——————– ——– ———-
SYS INDX3 UNUSABLE INVISIBLE
SYS INDX2 UNUSABLE VISIBLE

2 rows selected.

Be Sociable, Share!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


1 × yedi =